我有一个我正在处理的Web应用程序,我希望用户能够动态定义和触发热键。我希望有人可以帮助我吗?
我已经使用相关的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...');
});
注意:我已经使用'space'和'left / right'箭头键作为全局热键 - 有没有办法保护/阻止它们被分配?
使用比.not('input')更好的选择器来防止在输入输入时触发音轨?
感谢您的帮助!
答案 0 :(得分:2)
$(document).not('input')
找不到所有不属于input
标记的元素。它找到所有不是输入元素的文档节点(其中有一个)(它们都是其中之一)。您所做的就是将处理程序附加到document
。由于父元素会被通知其后代触发的事件,因此所有keydown
事件都由此函数处理。
您应该使用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
元素,则处理程序不会执行任何操作。