Javascript 佩奇为什么不停止按键?

Javascript 佩奇为什么不停止按键?,javascript,html,Javascript,Html,我已将以下代码放在页首的顶部: <script type="text/javascript"> function stopRKey(evt) { console.log(evt.keyCode); var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement

我已将以下代码放在页首的顶部:

<script type="text/javascript">

      function stopRKey(evt) {

          console.log(evt.keyCode);

          var evt = (evt) ? evt : ((event) ? event : null);

          var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);

          console.log(evt.keyCode);

          if ((evt.keyCode == 13) && (node.type == "text")) {
              return false;
          }
      }

      document.onkeypress = stopRKey;

    </script>

功能停止键(evt){
console.log(evt.keyCode);
var evt=(evt)?evt:((事件)?事件:空);
var节点=(evt.target)?evt.target:((evt.srcement)?evt.srcement:null);
console.log(evt.keyCode);
如果((evt.keyCode==13)和(&&(node.type==“text”)){
返回false;
}
}
document.onkeypress=stopRKey;
在我的一个页面上,当我按enter键时,它没有触发事件。但是我的页面中只有一个reast似乎工作正常,并且记录了13的键码,因此阻止了回发

你知道为什么这件事不会在这一页上发生吗

干杯,
Pete

可能在断开的页面上有表单元素触发非文本节点的回发。尝试删除阻止提交的条件的第二部分,以查看发生了什么:

if (evt.keyCode == 13) {
    return false;
}

您当然可以简化代码。对于
元素,没有理由不这样做:

function stopRKey(evt) {
    evt = evt || window.event;
    var node = evt.target || evt.srcElement;
    console.log(evt.keyCode);

    if (evt.keyCode == 13 && node.nodeName == "INPUT" && node.type == "text") {
        return false;
    }
}

您必须显示非工作页面的其余代码。如果此代码适用于您的大多数页面,则可能是正确的。因此,为了回答您的问题,您应该发布更多关于它不工作的页面的信息。一种可能是另一个事件处理程序在文档层次结构的更深层次上侦听,从而阻止按键事件冒泡。发布html很困难,因为html太多了。有没有办法记录正在发生的事件?可能使用Firebug?您已经将此事件记录到控制台,因此只需观察它是否被触发。您实际上可以使用Firebug分析按键事件。使用控制台中的命令monitoreports($$(“#fieldId”),“keypress”)激活id为“fieldId”的字段上所有按键事件的报告。如果在输入字段中键入内容时触发按键事件,还应监视其父元素。通过这种方式,您可以看到您的事件丢失的位置。但是我怀疑事件侦听器根本没有被触发,正如OP所说:“其余部分似乎正常工作,并且记录了13的键码”。@Marcel-但是节点类型是什么?控制台仍然可以记录键码,但如果非文本节点处于焦点位置,则表单仍将提交。可以,但他说它不会触发,并且在其他页面上记录键码,因此这是在条件出现之前。无论如何,我会等待OP的回应。