【问题标题】:Firefox: HTML keyUp event has no event dataFirefox:HTML keyUp 事件没有事件数据
【发布时间】:2011-09-10 15:20:15
【问题描述】:

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>

【问题讨论】:

    标签: javascript html firefox dom-events onkeyup


    【解决方案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');
    }
    &lt;input type="text" id="fname" onkeyup="upperCase(event)"&gt;

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

    function(event) {
        // Attribute value here
    }
    

    【讨论】:

    • @Warface:我在 OS X 上的 Firefox 中运行良好。没有理由不这样做。
    • 不知道为什么...但是我无法识别 window.event。不得不做一个getElementsById().value 来获取输入的值......很奇怪
    • @Warface:Firefox 中没有window.event
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      onkeyup="upperCase()"
      

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

      给定

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 2014-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-04
        • 1970-01-01
        相关资源
        最近更新 更多