Javascript";“onkeyup”;事件正在多次触发?
我有一个非常简单的代码,当在可编辑的表格单元格(CELL2)中键入时,每次按下Enter键时,控制台都会显示“按下Enter键”Javascript";“onkeyup”;事件正在多次触发?,javascript,Javascript,我有一个非常简单的代码,当在可编辑的表格单元格(CELL2)中键入时,每次按下Enter键时,控制台都会显示“按下Enter键” console.log('working'); 函数enterKeyCheck(x){ x、 addEventListener(“按键”,功能(y){ 如果(y=13){ y、 预防默认值(); console.log('Enter Pressed') }; }); }; 第1单元 细胞2 检查 onkeyup已经为每个按键启动了enterKeyCheck,并且在
console.log('working');
函数enterKeyCheck(x){
x、 addEventListener(“按键”,功能(y){
如果(y=13){
y、 预防默认值();
console.log('Enter Pressed')
};
});
};代码>
第1单元
细胞2
检查
onkeyup
已经为每个按键启动了enterKeyCheck
,并且在调用的enterKeyCheck
中有另一个事件侦听器,因此调用它两次。您应该只需要其中一个。onkeyup
已经为每个按键启动了enterKeyCheck
,并且您的enterKeyCheck
中有另一个被调用的事件侦听器,因此调用了两次。您应该只需要其中一个。您将附加两次事件,一次以html内联,另一次在enterKeyCheck
函数内。而不是此
从事件处理程序传递事件
对象,并在函数中检查事件代码
功能输入键检查(y){
如果(y.which==13){
y、 预防默认值();
console.log('Enter Pressed')
};
};代码>
第1单元
细胞2
检查
您将两次附加事件,一次在html中内联,另一次在enterKeyCheck
函数中附加。而不是此
从事件处理程序传递事件
对象,并在函数中检查事件代码
功能输入键检查(y){
如果(y.which==13){
y、 预防默认值();
console.log('Enter Pressed')
};
};代码>
第1单元
细胞2
检查
当您单击单元格时,onkeyup
正在调用enterKeyCheck
,它还有一个按键监听器,正在启动。
您可以将函数重写为类似这样的内容,以解决问题
document.querySelector('#cell').onkeyup = function (e) {
if (e.keyCode === 13) { // enter, return
console.log('Enter pressed') //do something
}
};
向单元格中添加一个可识别的id
<div id="test1">
<table>
<tr>
<td>CELL1</td>
<td contenteditable="true" id="cell">CELL2</td>
</tr>
</table>
CHECKING
</div>
第1单元
细胞2
检查
当您单击单元格时,onkeyup
正在调用enterKeyCheck
,它还有一个按键监听器,正在启动。
您可以将函数重写为类似这样的内容,以解决问题
document.querySelector('#cell').onkeyup = function (e) {
if (e.keyCode === 13) { // enter, return
console.log('Enter pressed') //do something
}
};
向单元格中添加一个可识别的id
<div id="test1">
<table>
<tr>
<td>CELL1</td>
<td contenteditable="true" id="cell">CELL2</td>
</tr>
</table>
CHECKING
</div>
第1单元
细胞2
检查
在enterKeyCheck
方法中使用this
时,会出现一些重复的情况。每次你点击,它都会触发总点击量,并为最后一次点击提供安慰。为了避免这种情况,只需使用事件
而不是此
。在这种情况下,代码如下所示:
<td contenteditable="true" onkeyup="enterKeyCheck(event)">CELL2</td>
如果您使用上述方法,我认为它将满足您的要求。在enterKeyCheck
方法中使用此
会重复一些事情。每次你点击,它都会触发总点击量,并为最后一次点击提供安慰。为了避免这种情况,只需使用事件
而不是此
。在这种情况下,代码如下所示:
<td contenteditable="true" onkeyup="enterKeyCheck(event)">CELL2</td>
如果您使用上述方法,我认为它将满足您的要求。在每个按键
事件上,您都为按键
添加了一个全新的事件侦听器。这些事件侦听器都不会被删除。在每个keyup
事件上,您都会为keypress
添加一个全新的事件侦听器。这些事件侦听器都不会被删除。非常感谢您的帮助。我这样做的唯一原因是,如果没有eventListener,preventDefault无法工作。上面的代码大部分是有效的,但我避免了在按enter键后光标移到第二行,但上面的代码并没有阻止这一点。另外,如果第一个事件只是对第二个事件的调用,您是否介意多讲一点如何调用这两次?非常感谢您的帮助。我这样做的唯一原因是,如果没有eventListener,preventDefault无法工作。上面的代码大部分是有效的,但我避免了在按enter键后光标移到第二行,但上面的代码并没有阻止这一点。另外,如果第一个事件只是对第二个事件的调用,您是否介意告诉我如何调用两次?谢谢Robin,但是,我不喜欢在按下enter键后,光标转到下一行,这就是我需要preventDefault的原因,如果没有eventlistener,则无法工作。您的建议中的preventDefault部分不起作用。谢谢,Robin,但是,我不喜欢在按下enter键后,光标转到下一行,这就是我需要preventDefault的原因,如果没有eventlistener,这是不起作用的。建议中的preventDefault部分不起作用。因此是一个函数调用另一个函数调用执行,为什么执行会发生两次?另外,如果我在按enter键之前键入6个字符(如“abcdef”),它不仅仅记录了两次消息,而是记录了6次消息。在我看来,函数应该只被调用一次。所以一个函数调用另一个函数调用执行,为什么执行会发生两次?另外,如果我在按enter键之前键入6个字符(如“abcdef”),它不仅仅记录了两次消息,而是记录了6次消息。在我看来,函数应该只调用一次。Prajwal,谢谢,但我需要使用preventDefault,否则按下Enter键时光标也会转到下一行。这是我必须使用eventlistener的唯一原因。您是否尝试在“if”块之前添加e.preventDefault()
?Prajwal,谢谢,但我需要使用preventDefault,因为否则当按下Enter键时光标也会转到下一行。这是我必须使用eventlistener的唯一原因。您是否尝试在之前添加e.preventDefault()