4

我知道 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。有任何想法吗?

4

2 回答 2

1

这个例子在 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>

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

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

请在此处查看兼容性表。看起来formIE 中可能还不支持该属性。

于 2012-10-19T21:05:37.757 回答
-1

你有没有尝试改变

   $("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

于 2012-10-19T21:13:39.847 回答