【发布时间】:2011-06-11 01:07:57
【问题描述】:
我正在使用 jresig 的 jquery 热键,它看起来适用于单个热键。问题是我有一个来自数据库的热键列表,我想读取它们并动态分配热键。所以我有一个热键和值列表,这是我的 js:
$(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;
});
}
)
})
它现在有效,但我很好奇为什么这个有效而另一个无效。热键变量是否继续覆盖最后一次迭代?此外,第一个代码看起来更高效,因为它只执行一个循环,而第二个代码执行两个。
【问题讨论】:
-
您也可以发布使用的标记吗?最好在 jsfiddle.net 上?
-
您需要了解有关标记的哪些信息?它们只是很多带有类热键和值的输入按钮,格式为“(热键)”,我也编辑了问题
-
顺便说一句,并不意味着听起来像个混蛋。我只是认为标记与我获得正确的值无关,问题是绑定的分配
标签: jquery jquery-plugins hotkeys