【问题标题】:<select> onchange with jQuery 1.3.2 and IE7<select> onchange 与 jQuery 1.3.2 和 IE7
【发布时间】:2012-07-19 09:25:36
【问题描述】:

我在选择时遇到了这个典型问题。首先让我明确表示我正在运行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,我正在寻找解决方案。

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

【问题讨论】:

  • 不替换 select 元素,为什么不直接删除 option 元素并放入新元素?
  • @code90 想到了这一点,但它是一个复杂的部分,包含许多包含并由 php 计算,所以这样做会有问题。

标签: jquery select binding bind onchange


【解决方案1】:

您可以替换optionselect 框而不是替换自身。

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

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

单击、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);

【讨论】:

  • 替换代码以 html 形式出现,带有上述选择和其他页面数据。
  • @LoneWOLFs 您可以做的一件事是,在替换 select 之后,您可以将 change 事件重新绑定到该 select
  • @LoneWOLFs 哈哈.. 感觉很开心
  • 是的,我非常反对使用这个旧的 jQuery 库,但我被告知不要更改它,因为它会破坏其他代码,否则我对此有其他逻辑 :) 无论如何感谢很大的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
相关资源
最近更新 更多