【问题标题】:change() event for select input in IE9IE9 中选择输入的 change() 事件
【发布时间】:2012-10-10 13:09:42
【问题描述】:

我知道 jQuery 的 change() 方法不会触发 IE9 中的选择和单选输入。但是,我发现的任何解决方法都不适合我。

这是适用于所有体面浏览器的代码:

    $("select#orderby").change( function(e){
        console.log("order");
        $("#candidate-filters").submit();
    });

这是我看到人们在 IE9 中解决此问题的一个版本:

    $("select#orderby").bind( ($.browser.msie)? 'propertychange' : 'change', function(e){
        console.log("order");
        $("#candidate-filters").submit();
    });

当我尝试时这不起作用。控制台中没有错误。只是什么都没有发生。我做错了什么?

编辑:当我切换到.on() 方法时,我可以导致页面重新加载(可能是.submit() 操作的结果),但没有捕获表单选择输入。页面只是重新加载,就好像没有任何改变一样。

它可以工作!但是我忽略了其他部分,其他人可能会觉得它有用。 IE 不支持 HTML5 form="form_id" 属性,该属性允许您在 <form> 标记之外放置一个表单元素。因此,一旦我能够绑定事件,我还必须将值附加到表单中:

if ($.browser.msie) {
    $("select#orderby").bind( "propertychange", function(e){
        //console.log("order");
        var update = $(this).val();
        $("#candidate-filters").append('<input type="hidden" name="orderby" value="'+ update +'" /> ');
        $("#candidate-filters").submit();
    });
} else {
    $("select#orderby").change( function(e){
        console.log("order");
        $("#candidate-filters").submit();
    });
}

我说得太早了: 上面的代码只适用于 IE8 而不是 IE9。有什么想法吗?

【问题讨论】:

  • 有什么特殊原因不能使用 click()?
  • @Jason 我不能使用点击,因为它是一个选择下拉菜单。因此,在用户做出新选择之前,该事件会触发并提交表单。
  • 我的错,我在你的问题中看到了“无线电输入”,似乎忽略了选择。
  • 如果您使用的是 1.5 之前的 jQuery 版本,那么这就是您的问题:bugs.jquery.com/ticket/8485

标签: javascript jquery cross-browser internet-explorer-9


【解决方案1】:

这个 example 在 IE9 的 jsfiddle 中对我来说似乎工作正常:

jQuery

$("#test").on("change", function(){
    alert("test changed to: " + this.value)
})​;

HTML

<select id="test">
  <option>1</option>
  <option>2</option>
  <option>3</option>
</select>

blur 也有可能使用的选项,但这绝对取决于具体情况。

ALSO,请注意 console.log 在 IE 中不起作用...这可能是您的问题的一部分。正如 @MikeMcCaughan 在 cmets 中所说,控制台应该与 IE 开发者工具配合使用。

请参阅兼容性表here。看起来form 属性在 IE 中可能还不支持。

【讨论】:

  • 注意:console.log 在 IE9 中可以正常工作,前提是您打开了“F12 开发人员工具”。它可能仍然是您的问题的一部分,但要明确一点。
  • 我在有和没有 console.log 的情况下都试过了。页面重新加载,但在提交表单时未捕获新值。这个 select 元素在
    元素之外可能是相关的,但使用 form="" 属性来关联它,就像 HTML5 一样。
  • 感谢@MikeMcCaughan 的澄清。我也不再使用 IE,所以我很欣赏评论。
  • @Emerson,这有点帮助。看来您的问题是兼容性问题。请看我上面的更新。另外,无论是谁投了反对票,请告诉我,我会做出任何必要的改变。谢谢。
【解决方案2】:

你有没有尝试改变

   $("select#orderby").change( function(e){
        console.log("order");
        $("#candidate-filters").submit();
    });

   $("select#orderby").click( function(e){
        console.log("order");
        $("#candidate-filters").submit();
    });

或使用 .on() 或 .live() ,取决于你的 jquery 版本,这对我有用,它也来自Here on SO

【讨论】:

  • 但是点击事件对于选择输入不起作用。下拉菜单一打开,表单就会被选中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
相关资源
最近更新 更多