1

我希望当按下 TAB 键来执行我的代码和e.preventDefault();. 为了测试,我只检查了以下事件alert(9);

$().ready(function(){
    $("div").delegate(".note","keydown",function(e){
        //not working
    });

    $("div").delegate(".note","keypress",function(e){
        //not working
    });

    $("div").delegate(".note","click",function(e){
        //working fine
    });
});

只有单击事件有效,而 keypress 和 keydown 无效。

4

3 回答 3

2

实际上,keydown目标keypressbody除非一个元素是焦点:

当一个元素被聚焦时,文档接收到的关键事件必须针对该元素。可能没有元素聚焦;当没有元素被聚焦时,文档接收到的关键事件必须针对body 元素

来源:https ://www.w3.org/TR/html50/editing.html#focus

所以问题不在于委派本身,而是使元素可聚焦(您的处理程序只是不会触发!)。对于能够接收焦点的任意元素,请使用tabindex应该具有关键事件处理程序的元素的属性(在此处了解更多信息)。

于 2018-02-24T19:19:54.053 回答
0

如果“.note”在接受焦点的元素中,这样的东西会起作用。

JS

$(function(){
   $("div").delegate(".note","keydown",function(e){
       if(e.originalEvent.keyCode == 9){
           console.log('Tada!');
           e.preventDefault();
       }
    });
});

见:http: //jsfiddle.net/fcEx5/

于 2013-06-15T01:24:02.467 回答
0

看看这个实现,它比你问的要复杂一点,但你可以利用它,它使用on()而不是delegate()推荐的:

<button id="myButton"> Click Me </button>
<input type="text" id="myText" />

js

function myFunction(){
     alert("hi!");
}



$(document).ready(function(){

    $("#myButton").on("click",myFunction);
    $("#myText").on("keydown",function(e){
        var keyCode = e.keyCode || e.which; 
        if (keyCode == 9) { 
            e.preventDefault(); 
            myFunction();
          } 
    });

});

TAB 按钮或单击按钮将触发该功能,还有一些关于on()

.on() 方法将事件处理程序附加到 jQuery 对象中当前选定的元素集。从 jQuery 1.7 开始,.on() 方法提供了附加事件处理程序所需的所有功能。

最后是工作演示

于 2013-06-15T01:34:50.563 回答