我有选择这个典型的问题。首先让我明确表示我正在运行jQuery 1.3.2
我知道它已经很老但是由于某些原因我无法更新它。我的问题在于jQuery 1.3.2
和IE7
。现在问题是我有以下选择框...
<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中运行
答案 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);