我在所有文本框上都有一个事件侦听器。单击文本框后,我想打开一个键盘。然后,在键盘的Enter上,我想使用调用它的文本框的ID进行一些逻辑处理。但是,id(代码中的txtbxId)只是成为我单击的第一个文本框,然后成为我在数组中单击的第二个文本框。 例如,警报变为“ textbox1”-在第二个文本框单击后,警报为“ textbox1”“ textbox2” 我试图将变量id强制为”,将其删除等等,都无济于事, 此处的代码段:
$('.textbox').click(function() {
var txtbxId = this.id;
$("#Keyboard").show();
$(document).on('keydown', function(e) {
if (e.which === 13) {
alert(txtbxId);
}
});
});
});
答案 0 :(得分:1)
问题是因为您要嵌套事件。因此,除了在点击事件发生时复制keydown
事件之外,您还向这些事件提供了每个单独的id
。
要解决此问题,请对所有.textbox
元素使用单个事件处理程序,并从对引发事件的元素的引用中读取它们自己的id
,这些元素可以通过{{1}获得}关键字:
this
答案 1 :(得分:0)
问题是,第一次单击文本框时,on('keydown')
函数永远不会被取消分配,因此,每次单击.textbox时,您都在进行新的keydown回调,但不会删除旧的回调
我建议您在用于管理.keydown回调的onClick回调之外创建一个对象,这样您随时都可以只有一个。
类似这样的东西:
window.keydownmanager = {
init: () => {
$(document).on('keydown', function (e) {
window.keydownmanager.callback(e);
});
},
callback: () => {},
setCallback: (cb) => {
window.keydownmanager.callback = cb;
}
}
在您的onClick回调中,执行以下操作:
var txtbxId = this.id;
$("#Keyboard").show();
window.keydownmanager.setCallback(function(e) {
if (e.which === 13) {
alert(txtbxId);
}
})