0

我有一个正在开发的网络应用程序,我希望用户能够动态定义和触发热键。我希望有人可以帮助我吗?

我用相关的 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') 更好的选择器来防止在输入输入期间触发轨道?

谢谢您的帮助!

4

1 回答 1

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

于 2011-05-14T09:26:39.710 回答