我在 jquery 中构建了一个级联下拉列表,并从几个示例中进行了修改。我添加了一项功能,让用户“备份”并重新选择较早的下拉菜单。这会重新加载下一个下拉菜单,并清除和禁用后续下拉菜单。
http://jsfiddle.net/goodeye/gA6GZ/
问题是在第一次通过后,选择元素的更改事件被绑定,所以我认为重新加载新值会导致后来的更改事件触发。
我分离了 .change() 绑定,而不是链接它。我以前在加载选择选项之前将其链接起来。这有助于第一次通过,但不是随后的时间。
对于这个问题,我特别在寻找一种处理这个序列的好方法:
- 避免改变()
- 更新下拉列表
- 设置更改()
这个问题: 在 jQuery 中删除事件处理程序的最佳方法? 有 unbind() 作为主要答案,然后是使用 live() 的后续答案。live() 方法使用了一个让我有点困惑的类,并且没有得到那么多的选票。
重现:
选择第1步,见第2步火。
选择第2步,见第3步火。
再次选择第1步,见第2步火。
然后麻烦开始了:
选择第2步,看第3步火两次。
选择第3步,看第4步火3次。
再次选择第 1 步,看第 2 步触发两次。
等等。
它甚至变得更糟;我会看到第 3 步触发五次。
一些细节:
在实际代码中,这些从 json ajax 调用加载。我从示例中删除了它,并添加了硬编码选项来模拟它,将其范围限定为事件问题。
这从服务器端开始,所以第一个下拉列表已经在 html 中。接下来的三个是从(模拟的)json 调用中加载的。
这些使用类进行识别,因为真实页面有不止一组这样的下拉菜单。该代码使用 $(this) 来小心在选定的一组内工作。
如果只有一个选项,还有一个“自动选择”功能,然后继续下一个选项。该代码在那里,但模拟示例都有多个选项,以避免此问题出现此问题。
提前感谢您的想法!