Javascript 在特定DOM元素上启用键盘侦听器(ctrl+;Z)

Javascript 在特定DOM元素上启用键盘侦听器(ctrl+;Z),javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,仅当呈现主干视图时,我才尝试通过jquery绑定键盘事件ctrl+z,当视图被移除时,我将解除绑定。但问题是我只想为当前视图解除ctrl+z事件的绑定 初始化视图时: $(document).keydown(function(e){ if((e.which === 90 && e.ctrlKey && e.shiftKey) || (e.which === 89 && e.ctrlKey)){

仅当呈现主干视图时,我才尝试通过jquery绑定键盘事件ctrl+z,当视图被移除时,我将解除绑定。但问题是我只想为当前视图解除ctrl+z事件的绑定

初始化视图时:

$(document).keydown(function(e){
                if((e.which === 90 && e.ctrlKey && e.shiftKey) || (e.which === 89 && e.ctrlKey)){
                    console.log('control + shift + z || control + y');
                    //redoAction;
                }
                else if(e.which === 90 && e.ctrlKey){
                    console.log('control + z');
                    //undoAction;
                }          
            }); 
在删除视图时:

$(document).off('keydown'); 
但最后一条语句将解除所有键盘侦听器的绑定。我不想那样

尝试将“on”处理程序与选择器一起使用,然后您可以使用相同的选择器以“off”取消对事件的调用。下面是一个基本的例子,虽然不完全在你的问题空间,但这个概念对你也应该有用

<p id="pOne">Click this paragraph to change its background color.</p>
<button id="btn1">Remove the click event with off()</button>

<script>
$(document).ready(function(){
    $(document).on("click","#pOne",function(){ //Notice use of "on" here
        $(this).css("background-color", "pink");
    });

    $("#btn1").click(function(){
        $(document).off('click','#pOne'); 
       //Notice here same selector: #pOne, used with "on"
    });
});
</script>

单击此段落以更改其背景颜色

使用off()删除click事件 $(文档).ready(函数(){ $(document).on(“click”、“#pOne”,function(){//注意这里使用了“on” $(this.css(“背景色”、“粉色”); }); $(“#btn1”)。单击(函数(){ $(文档).off('click','#pOne'); //注意这里的选择器:#pOne,与“on”一起使用 }); });
要检查特定事件,可以使用handler函数作为最后一个参数,类似于其他jQuery事件

更多来自


希望这能对您有所帮助。

在声明中为处理程序函数命名(或将其赋给变量)。然后可以使用该名称引用
.off()中的处理程序:


您可以利用jQuery的事件名称空间功能:

// Add multiple listeners under the 'foo' namespace.
$(document).on('keydown.foo', handler1);
$(document).on('keyup.foo', handler2);

// Unbind all listeners at once without keeping reference to the various handlers.
$(document).off('.foo');

这实际上是主干的视图类使用的一种模式,用于轻松删除框架添加到视图DOM元素中的所有处理程序。

对于单击事件,这很好。但是对于键盘事件,在本例中,没有与之关联的DOM元素可以绑定事件。这是否会分离$(document)的其他按键处理程序?@vrishank它将删除文档的所有按键,这些按键将
处理程序
作为事件处理程序附加。
// Add multiple listeners under the 'foo' namespace.
$(document).on('keydown.foo', handler1);
$(document).on('keyup.foo', handler2);

// Unbind all listeners at once without keeping reference to the various handlers.
$(document).off('.foo');