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>
答案 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)" />