使用jQuery 1.3.2和IE7实现<select> onchange事件

3

我有一个典型的选择问题。首先让我明确一点,我正在运行 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>

问题在于,我的脚本将此选择替换为从ajax调用中检索到的相同选择。但是,由于被替换了,change事件不再对其起作用。我可以使用live(),但这在jQuery 1.3.2之前的IE7中无法工作。我也不能使用deligate(),那么有没有办法在替换选择后实现连续的更改事件?

如果没有,我是否可以在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之外的解决方案。

Fiddle链接如果您在IE9中运行它,它将正常工作,但在IE7和IE8中不会。


为什么不只清除选项元素并放入新的选项,而不是替换选择元素呢? - code90
@code90 考虑过这个,但那是一个包含许多文件和由 PHP 计算的复杂部分,这样做会有问题。 - LoneWOLFs
1个回答

3

您可以替换元素。

$.live()不支持change事件:

在jQuery 1.3.x中,仅支持以下JavaScript事件绑定:

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

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

您可以使用livequery

一件事情您可以做的是,在替换

例如:

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

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

替换代码与上面的选择和其他页面数据一起以HTML形式呈现。 - LoneWOLFs
@LoneWOLFs 你可以做的一件事是,在替换 select 后,重新绑定 change 事件到该 select - thecodeparadox
@LoneWOLFs 哈哈.. 感觉很开心。 - thecodeparadox
是的,我非常反对使用这个旧版本的jQuery库,但是我被告知不要更改它,因为这会破坏其他代码,否则我有其他的逻辑可以解决这个问题 :) 无论如何,非常感谢你的帮助。 - LoneWOLFs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接