1

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>
4

3 回答 3

1

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

onkeyup="upperCase()"

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

给定

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

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

于 2011-06-08T07:00:19.133 回答
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
}
于 2011-06-08T08:15:55.967 回答
0

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

<input type="text" id="fname" onkeyup="upperCase(event)" />
于 2011-06-08T08:14:07.143 回答