jQuery如何创建和发射动态热键(keycode和:not()selector?)

问题描述:

我有一个web应用程序,我正在努力,我希望用户能够动态地定义和触发热键。我希望有人能帮助我?jQuery如何创建和发射动态热键(keycode和:not()selector?)

我用相关的HTML创建了JSFiddle HERE

这里是我的javascript:

// Assign Hotkey (this seems to be working) 
$('input.hotkey').keydown(function(event) { 
var hkey = event.keyCode; 
if (hkey == $('span#hk').text()){ 
    alert('This key is already in use'); 
} else 
    $(this).parent().parent().prev().find('span#hk').text(hkey); 
}); 

// Fire Hotkey (the problem might be here?) 
$(document).not('input').keydown(function (event) { 
    var hkey = event.keyCode; 
    if (hkey == $('span#hk').text()){ 
     $("span#hk:contains("+hkey+")").parent().click(); 
    } 
}); 

// Play Selected Track 
$('#track').live('click', function() { 
    // Fake Function 
    var title = $('#title', this).text(); 
    alert(title + ' is playing...'); 
}); 

注:我已经使用了“空间”和“左/右”方向键为全局热键 - 是为了保护/防止它们被分配的一种方式?

是否有比使用.not('input')更好的选择器来防止在输入打字期间触发轨道?

感谢您的帮助!

$(document).not('input')找不到所有不是input标签的元素。它查找所有不是输入元素的文档节点(其中有一个)(这些文档节点都是其中之一)。您所做的只是将处理程序附加到document。由于父元素被通知其后代触发的事件,因此所有​​事件都由此函数处理。

你应该做的,而不是event.target使用:

$(document).keydown(function (event) { 
    if (event.target.nodeName.toLowerCase() !== 'input') { 
     var hkey = event.keyCode; 
     if (hkey == $('span#hk').text()){ 
      $("span#hk:contains("+hkey+")").parent().click(); 
     } 
    } 
}); 

if声明意味着处理程序没有做任何事情,如果该事件源于一个input元素。

+0

非常感谢!这对于输入/文档事件的定位非常出色! – Josiah 2011-05-14 19:50:33