在事件处理程序内部删除jquery事件处理程序

Mal*_*ist 10 javascript jquery javascript-events

我有一个keydown事件处理程序,我附加到我的文档,所以我可以在任何地方观看keydown事件.但是,在满足条件后,我希望能够删除该条件并仅删除该处理程序.我怎样才能做到这一点?

这是我当前的处理程序:

    $(document).keydown(function(event){
        console.log(event);

        var tag = event.target.tagName.toLowerCase();
        if(event.which = 27 && tag != 'input' && tag != 'textarea'){    //escape has been pressed
            _dismissModal(modal_id);
        }
    });
Run Code Online (Sandbox Code Playgroud)

我想在_dismissModal调用之后删除这个keydown事件处理程序.如何在不删除所有keydown事件处理程序的情况下执行此操作?

kas*_*ans 6

您可以使用jquery off()方法。您还可以将keydown逻辑放入一个单独的函数中,以便只能在off方法中定位该keydown动作。

var mykeydownfunction= function(){
    console.log(event);

    var tag = event.target.tagName.toLowerCase();
    if(event.which = 27 && tag != 'input' && tag != 'textarea'){    //escape has been pressed
        _dismissModal(modal_id);
        $(this).off('keydown', mykeydownfunction);// $(this) is the document
    }
}  

 $(document).on('keydown', mykeydownfunction);
Run Code Online (Sandbox Code Playgroud)


Jam*_*ard 5

使用.off()删除事件处理程序.

$(document).on("keydown", function(event){
    console.log(event);

    var tag = event.target.tagName.toLowerCase();
    if(event.which = 27 && tag != 'input' && tag != 'textarea'){    //escape has been pressed
        _dismissModal(modal_id);
        $(this).off("keydown");
    }
});
Run Code Online (Sandbox Code Playgroud)