jquery on()和off()不起作用

时间:2016-05-12 02:43:56

标签: javascript jquery

首先我注册一个活动

$(document).on('change',"*[dependent-group]", function (e) {
        e.stopImmediatePropagation();
        debugger;
        if ($(this).val()) {
            obj.dependentLists($(this), $(this).val());
        } else {
            obj.resetLists($(this));
        }
    });

然后我用

关掉它
 $(document).off('change',"*[dependent-group]");

问题是我再次附加事件,它不会触发。

2 个答案:

答案 0 :(得分:0)

$(document).on('change',"*[dependent-group]")您如何“再次附加活动”?如果,是的,它不会重新连接第一个处理程序。你必须通过处理程序。

function handler(e) {
    e.stopImmediatePropagation();
    debugger;
    if ($(this).val()) {
        obj.dependentLists($(this), $(this).val());
    } else {
        obj.resetLists($(this));
    }
}

$(document).on('change',"*[dependent-group]", handler); 
$(document).off('change',"*[dependent-group]", handler);
$(document).on('change',"*[dependent-group]", handler);

请注意,您也可以定义开关变量,而不是使用off并重新附加处理程序。

var run = true;
function handler(e) {
    if (!run) return;
    e.stopImmediatePropagation();
    debugger;
    if ($(this).val()) {
        obj.dependentLists($(this), $(this).val());
    } else {
        obj.resetLists($(this));
    }
}

$(document).on('change',"*[dependent-group]", handler); 
// ...
run = false;
// ...
run = true;

答案 1 :(得分:0)

要打开它:

$(document).find("*[dependent-group]").change( function (e) {
        e.stopImmediatePropagation();
        debugger;
        if ($(this).val()) {
            obj.dependentLists($(this), $(this).val());
        } else {
            obj.resetLists($(this));
        }
    });

将其关闭:

$(document).find("*[dependent-group]").off('change')

如果你想要你可以腰带和牙套:

$(document).find("*[dependent-group]").off('change').change( function (e) {
        e.stopImmediatePropagation();
        debugger;
        if ($(this).val()) {
            obj.dependentLists($(this), $(this).val());
        } else {
            obj.resetLists($(this));
        }
    });