Javascript";“onkeyup”;事件正在多次触发?

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,并且在

我有一个非常简单的代码,当在可编辑的表格单元格(CELL2)中键入时,每次按下Enter键时,控制台都会显示“按下Enter键”

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()