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
元素。
非常感谢!这对于输入/文档事件的定位非常出色! – Josiah 2011-05-14 19:50:33