为什么在Jquery中添加“blocker”类后,我的事件绑定不再触发?

时间:2013-03-19 09:50:44

标签: javascript jquery events jquery-mobile binding

我绑定了这样的搜索输入:

$(document).on('tablebeforefilter.results_filter',
   '#results_table:not(.bound)',
   function (e, data) {
     e.target.class += "bound";
     // stuff
   });

我正在使用bound类来防止在重新加载页面时重新绑定元素(我正在使用Jquery Mobile所以当用户在两个之间来回切换时会发生这种情况页。

我的问题是,这样做会正确设置绑定,但它只会触发我的处理程序一次,因为我将'bound'类添加到元素中。

问题
为什么会这样?我认为$(document) & some element上的绑定集会被设置然后运行,无论我添加到这个元素的类。只有在重新解析页面时,我的bound类才会阻止第二次附加绑定。如果我添加阻止bound类,为什么我的函数不再触发?

谢谢!

2 个答案:

答案 0 :(得分:3)

.class是一个字符串。因此,您将"bound"添加到字符串"results_filter"并获取"results_filterbound" - 一个全新的类。因此.on()选择器不再匹配。如果您想使用.class,您还必须添加空白:

e.target.class += " bound";

这会添加一个类bound并保留旧类。要轻松处理类,您可以使用jQuery的addClass()removeClass()

答案 1 :(得分:1)

使用带有“.on”的jQuery旨在与更改的html结构一起使用。因此,一旦您添加“绑定”类,您的事件就不会再被触发了。

尝试使用类似的东西

$(document).on('tablebeforefilter.results_filter', '#results_table', function (e, data) {
    var $table = $(this);
    if ($table.hasClass('bound') == false) {
        $table.addClass('bound');
    } else {
        // stuff with bound class
    }
    // common stuff for both cases
});