IE9中选择输入的change()事件

时间:2012-10-19 20:59:09

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

我知道jQuery的change()方法不会触发IE9中的select和radio输入。但是,我找到的解决方法都没有为我工作。

以下代码适用于所有不错的浏览器:

    $("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()操作的结果),但表单选择输入是抓住了。页面只是重新加载,好像什么都没有改变。

IT工作!但还有一个我忽略的部分,其他部分可能会发现有用。 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。有什么想法吗?

2 个答案:

答案 0 :(得分: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上使用,但这肯定取决于具体情况。

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

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

答案 1 :(得分:-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