jquery热键动态绑定
我正在使用jresig的jquery热键,它看起来可以用于单个热键。问题是我有一个数据库热键列表,我想读取它们并动态分配热键。我有一个热键和值列表,这是我的js:jquery热键动态绑定,jquery,jquery-plugins,hotkeys,Jquery,Jquery Plugins,Hotkeys,我正在使用jresig的jquery热键,它看起来可以用于单个热键。问题是我有一个数据库热键列表,我想读取它们并动态分配热键。我有一个热键和值列表,这是我的js: $(document).ready(function() { var keyList = []; $('.hotkey').each( function(){ hotkey = $(this).attr('value'); hotkey = hotkey.substring(1,hotkey.length
$(document).ready(function() {
var keyList = [];
$('.hotkey').each( function(){
hotkey = $(this).attr('value');
hotkey = hotkey.substring(1,hotkey.length-1);
myVal = $(this).next().attr('value');
alert("binding " + hotkey);
$(document).bind('keydown', hotkey, function() {
alert("YOU PRESSED " + hotkey);
$('.chosen-category-id').attr('value', hotkey);
$('.chosen-category-name').attr('value', myVal);
});
})
})
现在发生的是,每次我按下一个键,它只会提醒它绑定的最后一个热键。这里的逻辑有问题吗?我不想复制粘贴大量的document.bind行,所以我尝试动态地这样做
编辑
我用以下代码重构了我的代码:
$(document).ready(function() {
var keyList = [];
var keyValues = [];
$('.hotkey').each( function(){
hotkey = $(this).attr('value');
hotkey = hotkey.substring(1,hotkey.length-1);
keyList.push(hotkey);
keyValues.push($(this).next().attr('value')) ;
})
$.each(
keyList,
function(index, key) {
$(document).bind('keydown', key, function() {
alert("O HAI YOU PRESSED " + key);
$('.chosen-category-id').attr('value', key);
$('.chosen-category-name').attr('value', keyValues[index]);
return false;
});
}
)
})
它现在起作用了,但我很好奇为什么这个能起作用而另一个不行。热键变量是否一直覆盖上一次迭代?而且,第一个代码看起来更有效,因为它只执行一个循环,而第二个代码执行两个循环。我也遇到了类似的问题。我有这个:
$(document).bind('keypress', keyBinding, function(e) {
e.preventDefault();
$(this).trigger("click");
});
但在阅读了一些示例后,我将其改为:
$(document).bind('keydown', keyBinding, function(e) {
$(this).trigger("click");
return false;
});
这两个变量都在一个each循环中,就像您的循环一样,我将keybinding变量指定给Ctrl+s或Ctrl+Right之类的对象。有趣的部分显然是按键和返回false;。我现在做的一切都很好。我的第一个代码并不是在所有浏览器中都能用,但在FF中却能用
我学到的另一个技巧是,必须小心绑定。有些绑定不能在所有浏览器中工作。例如,Ctrl+n在Chrome中不起作用,也可能在其他浏览器中不起作用。上包含测试页。我对其中一个进行了改造,使其在本地开发网站上工作,这样我就可以测试组合键,直到我在页面上找到了有效的组合键。我也遇到了类似的问题。我有这个:
$(document).bind('keypress', keyBinding, function(e) {
e.preventDefault();
$(this).trigger("click");
});
但在阅读了一些示例后,我将其改为:
$(document).bind('keydown', keyBinding, function(e) {
$(this).trigger("click");
return false;
});
这两个变量都在一个each循环中,就像您的循环一样,我将keybinding变量指定给Ctrl+s或Ctrl+Right之类的对象。有趣的部分显然是按键和返回false;。我现在做的一切都很好。我的第一个代码并不是在所有浏览器中都能用,但在FF中却能用
我学到的另一个技巧是,必须小心绑定。有些绑定不能在所有浏览器中工作。例如,Ctrl+n在Chrome中不起作用,也可能在其他浏览器中不起作用。上包含测试页。我对其中一个进行了改造,使其在本地开发网站上工作,这样我就可以测试组合键,直到我在页面上找到有效且有意义的组合键。您也可以发布所使用的标记吗?最好是在jsfiddle.net上?关于标记,您需要知道什么?它们只是很多带有类热键的输入按钮和热键格式的值,而且我编辑了这个问题,顺便说一句,我并不想听起来像个混蛋。我只是觉得标记不相关,因为我得到的是正确的值,问题是绑定的分配。你也可以发布使用的标记吗?最好是在jsfiddle.net上?关于标记,您需要知道什么?它们只是很多带有类热键的输入按钮和热键格式的值,而且我编辑了这个问题,顺便说一句,我并不想听起来像个混蛋。我只是觉得标记不相关,因为我得到了正确的值,问题是绑定的分配