Firefox:HTML keyUp事件没有事件数据

时间:2011-06-08 06:55:34

标签: javascript html firefox javascript-events onkeyup

onKeyUp事件在IE(7)中运行,而不在Firefox(4.0.1)中运行。

我有一个带有属性的文本字段onclick =“eventName();” 在javascript函数eventName(evt)中我没有事件数据,事件数据不是由firefox发送的。另一方面,在IE中,window.event被填充,所以在这里工作......

IE和Firefox都能很好地实现这一功能。唯一的问题是我需要那里的事件数据。 任何人都可以指导我解决这个恼人的问题吗?

示例页面

<html>
<head>
    <script type="text/javascript">
        function upperCase(evt) { 
            if (evt) {
                var target = evt.target;
                target.value = target.value.toUpperCase();
            } else if (window.event) {
                var target = window.event.srcElement;
                target.value = target.value.toUpperCase();
            } else alert('No event information');
        }
    </script>
</head>
<body>
    <span>Enter your name: </span>
    <input type="text" id="fname" onkeyup="upperCase()" />
</body>
</html>

3 个答案:

答案 0 :(得分:1)

IE使用全局处理事件。事件传递的所有其他内容都是函数的第一个参数。

onkeyup="upperCase()"

你在那里没有做任何事情。我甚至不确定你能不能 - 除了多年来最琐碎的玩具外,我没有触及任何内在的事件属性。

鉴于

document.getElementById('fname').keyup = upperCase;

(或者,更好的是,使用attachEvent / addEvent,将填充evt变量。)

答案 1 :(得分:1)

要在所有浏览器中使用此功能,请将event传递给您正在呼叫的功能:

<input type="text" id="fname" onkeyup="upperCase(event)">

function upperCase(evt) { 
  if (evt) {
    var target = evt.target;
    target.value = target.value.toUpperCase();
  } else if (window.event) {
    var target = window.event.srcElement;
    target.value = target.value.toUpperCase();
  } else alert('No event information');
}
<input type="text" id="fname" onkeyup="upperCase(event)">

在某些浏览器(例如IE)中,这可行,因为event解析为window.event,它始终引用正在处理的当前事件。在其他浏览器(例如Firefox)中,这是有效的,因为event是一个在事件处理程序范围内的变量。您可以将onkeyup属性的内容想象为看起来像

的函数体
function(event) {
    // Attribute value here
}

答案 2 :(得分:0)

您忘记将事件作为参数实际传递,应该是:

<input type="text" id="fname" onkeyup="upperCase(event)" />