0

我有一个页面,它曾经使用一个类来禁用触发器,直到页面被大量加载。示例剪辑:


$('body').addClass('disable');

// mark unsaved changes
$('body:not(.disable)').on('change', '.CE', function(ev) {
    // mark_if_changed() is at the bottom of this file
    mark_if_changed($(this));
});

[...在不触发触发器的情况下加载大部分动态内容...]

$('body').removeClass('disable');

触发器的目的是在修改具有 CE 类的字段时更新数据库。使用上述方法,它不起作用。

如果我删除“:not(.disable)”,更改会更新——但在初始页面加载期间会调用很多不必要的回调。

使用 jQuery 1.7,它使用 .live() 工作。对于 1.9,它不工作,使用 .on()。我可以删除 :not() 并测试以查看“禁用”是否是类属性的成员,但这感觉就像是用胶带粘住问题而不是修复它。

https://dragonstone-mill.com/tabbed.html是我使用它的页面。

在 $(document).ready() 之后以有序的方式调用上述所有内容,请参阅 tabbed.html 中的 ~ln:103,它加载了函数和绑定。

有更好/更正确的方法吗?

4

1 回答 1

1

您的事件处理程序设置不太正确。

而不是这个:

$('body:not(.disable)').on('change', '.CE', function(ev) {

试试这个:

$(document).on('change', 'body:not(.disable) .CE', function(ev) {

现在,您正在检查附加事件处理程序时是否禁用了正文。无论如何,您都想附加事件处理程序,但只有在您的选择器匹配时才运行它。尝试一下,看看它是否按预期工作。

于 2013-02-26T16:38:17.673 回答