gpt4 book ai didi

jquery热键动态绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 06:07:01 25 4
gpt4 key购买 nike

我正在使用 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);
});

})
})

现在发生的情况是,每次我按下一个键,它只会提醒它绑定(bind)的最后一个热键。这里面的逻辑是不是有什么问题?我阻止自己复制粘贴无数的 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;
});

这两个都在每个循环内,就像你的循环一样,我将键绑定(bind)变量分配给“Ctrl+s”或“Ctrl+Right”之类的东西。有趣的部分显然是“keypress”和“return false;”。我现在所拥有的工作得很好。我的第一个代码并不适用于所有浏览器(chrome),但适用于 FF。

我学到的另一个花絮是你必须小心绑定(bind)。某些绑定(bind)不适用于所有浏览器。例如,Ctrl+n 在 Chrome 中不起作用(也许在其他浏览器中)。 github site 上包含测试页。我对其中一个进行了改造,以便在我的本地开发网站上工作,这样我就可以测试关键组合,直到找到在页面上有效且有意义的组合。

关于jquery热键动态绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4723543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com