使用jQuery 1.3.2和IE7 </select> <select> onchange

时间:2012-07-20 05:56:43

标签: jquery select binding bind onchange

我有选择这个典型的问题。首先让我明确表示我正在运行jQuery 1.3.2我知道它已经很老但是由于某些原因我无法更新它。我的问题在于jQuery 1.3.2IE7。现在问题是我有以下选择框...

<select class="myclass">
    <option value="select">Select</option>
    <option value="sunday">Sunday</option>
    <option value="monday">Monday</option>
    <option value="tuesday">Tuesday</option>
    <option value="wednesday">Wednesday</option>
</select>

问题是,对于我的脚本,这个select被替换为从ajax调用中检索的相同select。但由于它被替换change事件不再适用于它。我可以使用live(),但从jQuery 1.3.2开始,这在IE7中不起作用。我也不能使用deligate(),所以有没有方法可以在替换select之后实现连续的更改事件?

如果没有,我可以在ajax调用之后将.change()函数绑定到同一个元素吗?

这是我的剧本......

$('.myclass').change(function(){
    //other code
    $.post(document.URL,data,function(){
        //other code
        //[[here on success I want to bind the same code again on my class so it will be called the next time]]
    });
});

重新绑定函数是一个选项吗?我正在寻找除添加livequery之外的解决方案。

Link to Fiddle如果你在IE9中运行它会工作,但不能在IE7和IE8中运行

1 个答案:

答案 0 :(得分:3)

您可以替换option框的select而非替换自己。

change不支持

$.live()事件:

  

在jQuery 1.3.x中,只能绑定以下JavaScript事件:

     

click,dblclick,keydown,keypress,keyup,mousedown,mousemove,   mouseout,mouseover和mouseup。

请参阅http://docs.jquery.com/Events/live

您可以使用livequery

您可以做的一件事是,在替换select后,您可以将change事件重新绑定到select

例如:

function replaceSelect() {
    var select = this;
    //other code
    $.post(document.URL,data,function(data){
        $(select).replaceWith(data.html);
        $('.myclass').change(replaceSelect);
    });

}
$('.myclass').change(replaceSelect);