【问题标题】:Form button not working in IE11表单按钮在 IE11 中不起作用
【发布时间】:2015-04-29 23:47:41
【问题描述】:

我创建了一个带有提交按钮的表单,提交按钮在实际表单之外,但它使用表单属性来定位表单。

<form id="myform">
</form>

<button form="myform"></button>

对于本周的示例,我深表歉意。这适用于除 IE 11 之外的所有浏览器。IE 8-10 100% 工作。关于如何解决这个问题的任何想法。我宁愿不写脚本。我可以用 jQuery 做到这一点,但我更喜欢尽可能保持干净

【问题讨论】:

  • 为什么不在表单标签内使用 ?这不是将按钮放在表单标签之外的好方法。
  • 把它放在外面的原因是要浮动到表单和里面的容器不同
  • IE documentation 说:“检索对对象嵌入的表单的引用。”
  • HTML5 表单属性在 IE 8-9 中是如何工作的?它不支持它。
  • 这是我想不通的异常。这就是我创建这篇文章的原因。但我用过@specialone的回答

标签: html forms internet-explorer


【解决方案1】:

这是一个只有一个点击事件和一行css的解决方案。 (最小)

如果由于用户界面设计,您的按钮必须位于表单之外。

我建议你在表单中添加一个输入提交/按钮:

<form id="myform">
   <input type="button" value="Submit" class="myButton" />
</form>
<button id="outerBtn">Submit</button>

隐藏输入:

.myButton {display:none;} OR {visibility:none;}

使用jQuery触发点击表单内的输入按钮:

$('#outerBtn').on('click', function(e){
   e.preventDefault();
   $('.myButton').trigger('click');
});

只是一些快速的答案。应该没问题。 如果您不想编写脚本,我建议您将输入按钮/提交保留在表单中。

【讨论】:

  • 这确实工作得很好,谢谢,但是没有办法忽略 jQuery 吗?为什么这不适用于 IE 11,我在任何地方都找不到解释
  • @hamed 是对的,当您想与表单交互时,将按钮放在表单之外是不对的。是的,现在根据您的测试 IE11 可能有问题,但我相信如果您在多个浏览器和操作系统上进行更多测试,您会发现它们也可能无法正常工作。如果您想忽略 jQuery,我建议您将正确的输入按钮/提交放在表单中。
  • @Philip 如果能解决您的问题,请选择我的帖子作为您的答案。
  • @specialone:在 html5 中,在表单之外添加一个提交按钮是绝对正确的(属性 form=)。似乎 IE/Edge 没有发挥作用。
  • 如果使用 Javascript,则不需要第二个隐藏的提交按钮。只需执行 document.getElementById('myform').submit() 或使用 jQuery $('#myform').submit()
【解决方案2】:
<form id="form-any-name">
   <input type="button" value="Submit" class="myButton" />
</form>
<button type="submit">Submit</button>

<script type="text/javascript">
    $(document).ready(function() {
        $('button[type=\'submit\']').on('click', function() {
            $("form[id*='form-']").submit();
        });
    });
</script>

只需在准备好的提交捕获器中包含文档,您就可以将该代码放在主 js 文件中,因为我们捕获以表单开头的动态表单 ID,因此在其他页面中您可以使用不同的表单:)

【讨论】:

    【解决方案3】:

    我想发布我的答案,因为这篇文章对我有很大帮助,而且我想出了一个想法,如果你想在旧版浏览器上添加“表单外按钮”功能。

    我使用 JQuery,但我认为使用纯 JS 不会是一个大问题,因为它不是复杂的代码。

    按照这里建议的一些答案创建一个类

    .hiddenSubmitButton {
        display: none;
    }
    
    $("body").on("click", "button[form]", function () {
        /*This will get the clicks when make on buttons with form attribute
         * it's useful as we commonly use this property  when we place buttons that submit forms outside the form itself
         */
        let form, formProperty, formAttribute, code, newButtonID;
        formProperty = $(this).prop("form");
        if (!(formProperty === null || formProperty === "")) {//Most browsers that don't wsupport form property will return null others "" 
            return; //Browsers that support the form property won't continue
        }
        formAttribute = $(this).attr("form");
        form = $("#" + formAttribute);
        newButtonID = formAttribute + "_hiddenButton";
        if (document.getElementById(newButtonID) !== null) {
            $("#" + newButtonID).click();
            return;
        }
        code = '<input id="' + newButtonID + '" class="hiddenSubmitButton" type="submit" value="Submit" />';
        $(form).append(code);
        setTimeout(function () {
            $("#" + newButtonID).click();
        }, 50);
    });
    

    我喜欢在表单外创建按钮的一点是,它们允许我们更轻松地自定义设计,我们可以使用此代码,它可以在旧浏览器上运行,而且浏览器将使用其 HTML 表单验证器。

    【讨论】:

      【解决方案4】:

      IE 理解'for',你可以使用“label for=''”。

          <label for="form_one_submit">Button one</label>
          <form action="" id="form_one">
            <span></span>
            <input type="submit" id="form_one_submit" style="visibility:hidden;">
          </form>
      

      【讨论】:

      • 问题是指一个按钮,而不是一个标签
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多