onkeyup处理程序没有被调用

时间:2013-09-07 18:06:14

标签: javascript html

我在昨天发现了一篇关于SO的帖子(我现在找不到),说下面的代码应该可以正常工作,但事实并非如此 - 下面的'handleRtnKey(e)'函数从未被调用 - 为什么?

<input type="text" id="zer" onkeyup="handleRtnKey(e)"/>

// my javascript function -- by the way, I will not be using jquery.
function handleRtnKey(e)
{
    alert("Just entered handleRtnKey()");

    if (!e) 
    {
        e = window.event;   // resolve event instance for IE    
    }

    alert("Just entered handleRtnKey(), e.keyCode is: " + e.keyCode);
    alert("Just entered handleRtnKey(), e is: " + e);

    if (e.keyCode == '13')
    {
      alert("handleRtnKey: got the RTN key up event.");
      return false;
    }
}

没有任何警报触发。

我昨天发现了一篇SO帖子,里面有一个近乎准确的代码(没有我的警报)声称工作正常(对不起,我无法重新找到SO帖子)。

我需要使用直接的javascript(而不是jquery)来获取我的输入文本框中的keyup事件的关键代码 - 这就是我需要做的,如果它是Return键,那么我将采取一些动作,但是现在我无法获取上面的代码来触发handleRtnKey()函数 - 为什么?

修改

Damon向我介绍了关键字'event',上面的代码现在运行正常 - 我只是将html代码中的参数从'e'重命名为'event',javascript处理程序现在运行正常 - 这是只修改上面的代码我不得不做:

 // OLD
 <input type="text" id="zer" onkeyup="handleRtnKey(e)"/>

 // NEW
 <input type="text" id="zer" onkeyup="handleRtnKey(event)"/>

注意:javascript函数handleRtnKey(e)未更改,我没有理由更改该函数的签名,它看起来如下所示并且现在正常工作:

function handleRtnKey(e)
{
    alert("Just entered handleRtnKey()");

    if (!e) 
    {
        e = window.event;   // resolve event instance for IE    
    }

    alert("Just entered handleRtnKey(), e.keyCode is: " + e.keyCode);
    alert("Just entered handleRtnKey(), e is: " + e);

    if (e.keyCode == '13')
    {
      alert("handleRtnKey: got the RTN key up event.");
      return false;
    }
}

 THANKS DAMON.      

3 个答案:

答案 0 :(得分:1)

你根本不需要参数,只需使用event

function handleRtnKey() {
    event = event || window.event; // for cross-browsing
    alert(event); // or do whatever you want with it
};

DEMO

答案 1 :(得分:0)

问题是您使用您没有的参数调用方法。 e未声明。如果你删除它将有效。这段代码对我有用:

<input type="text" id="zer"/>

<script>
window.onload = function () {
    document.getElementById("zer").onkeyup = function(event) {
        if (event.keyCode == 13) {
            alert("Just entered handleRtnKey()");
        }
    };
};
</script>

答案 2 :(得分:0)

我问题的解决方案就像Damon在上面的评论中指出的那样 - 我不知道有一个预定义的'event'关键字,当我在上面的代码中使用'event'代替'e'时,它工作了精细。