“事件”是JavaScript中的保留字吗?

时间:2009-10-02 15:03:10

标签: javascript events reserved-words

我是Javascript的初学者。当我练习时,我注意到了一些事情。

采取此功能:

<script type="text/javascript">
    function showChar(sSomeData, oEvent)
    {
        alert (oEvent.keyCode);
        return true;
    }

</script>

当我将此函数称为:

 <input type="text" id="txtTextBox" onkeypress="return showChar('some text', oEvent);" />

我收到一个JS错误:“Microsoft JScript运行时错误:'oEvent'未定义”

但如果我用'event'重命名oEvent,如:

<input type="text" id="txtTextBox" onkeypress="return showChar('some text', event);" />

然后它工作正常。我的结论是'事件'是一个代表事件的保留词 Java Script中的参数。但是当我检查网时,我并没有将“事件”视为保留字。

我错了,或者它没有真正记录为保留字?

谢谢!

6 个答案:

答案 0 :(得分:28)

它不是保留关键字,但它至少是IE中的全局变量。

答案 1 :(得分:22)

最初让我感到困惑的是,不了解编码事件处理程序的约定实际上是如何工作的,而命名变量是什么,并结合了由设置这样的事件处理程序时的Javascript处理程序:

好1

document.getElementById('testId').onkeypress = function(e) {
     console.log(e.which);
}

上面,您的浏览器将event作为函数的第一个参数隐式传递给处理程序,因此您可以为参数命名(此处,e您想要的任何内容,只要您'一致,即使你像这样发疯:

好2;创造性地命名

document.getElementById('testId').onkeypress = function(aWhopBopALuWhop) {
     console.log(aWhopBopALuWhop.which);
}

但由于event被用作全局的方式,像这样的肮脏代码也有效:

Cruddy范围1

document.getElementById('testId').onkeypress = function(aWhopBopALuWhop) {
     console.log(event.which);   // <<< decidedly NOT aWhopBopALuWhop
}

所以你可能还会看到像这样的双重代码:

Cruddy Scoping 2

document.getElementById('testId').onkeypress = function(event) {
     console.log(event.which);
}

现在哪eventevent?不幸的是,没关系。无论范围如何,我们都将event放入event,以便event === event! [原文]

但这确实表明event 不是保留字。这是一个变量。所以,你不能说break = "spam";可以event = "spam";。因此,如果您尝试使用<{1>},其中 保留,则会发生错误。

break

重要的是要学习(以及Ionut is essentially saying, I believe),您的浏览器是将“全局”document.getElementById('testId').onkeypress = function(break) { console.log(break.which); } var静默传递到您的event处理程序中无论你在函数定义中称之为什么。令人困惑的是,即使您没有使用参数访问处​​理程序中的onkeypress,您仍然可以访问event作为全局,如 Cruddy 1&amp; 2 ,上面。

现在,当我从html-land打电话event时,范式开始在我脑海中混合。这里,onkeypress没有静默传递到你的处理函数的参数中。您必须自己明确传递event,如下所示:

event

没有其他约定可以使用!这只会起作用,因为浏览器支持它,而不是因为任何ECMAscript标准定义<script> function handlerNamed(namedParam) { console.log(namedParam.which); } </script> <input type="text" size="10" onkeypress="handlerNamed(event)"><br /> (afaik)。您不能使用.onKeyPress,通过更改event中匹配的参数名称来使用以下任何内容:

handlerNamed

有意义吗?我正处于a much too complicated jsFiddle的中间,试图在它最终点击之前写下来以防有用。

答案 2 :(得分:10)

嗯,代码:

onkeypress="return showChar('some text', oEvent);"

是否等效于以下JavaScript代码:

element.onkeypress = function (eventObjectName) {
    return showChar('some text', eventObjectName);
};

只是浏览器将事件参数命名为event

因此,属性的值包含在JS函数中,该函数接收名为event的参数,该参数是事件对象。

答案 3 :(得分:6)

不,event不是保留字。但是,它是一个变量,它是在执行DOM节点的事件处理程序(例如onkeypress)时由所有主要浏览器设置的。在IE中,它也是一个全局变量。

获得此事件的典型跨浏览器方式就是这些。

在DOM节点上:

<div onclick='someFunction(event)'>Click me</div>

事件处理功能:

function someFunction(evt) {
  var srcElem = evt.srcElement || evt.target;

  // Code continues
}

顺便说一句,在您的示例中,oEvent是参数的名称,因此在被调用函数的上下文中有效,而不是在调用者的上下文中。

答案 4 :(得分:5)

答案 5 :(得分:0)

这是旧的,但是因为我偶然发现它,我想我也可以回答。

http://www.w3schools.com/js/js_reserved.asp表示该事件不是保留字,如上面的评论所述。但是,如果您在页面下方进一步阅读....

&#34; Windows保留字 JavaScript可以在HTML之外使用。它可以在许多其他应用程序中用作编程语言。

在HTML中,你必须(为了便携性)避免使用HTML和Windows对象和属性的名称:&#34;

并且&#39;事件&#39;显示在下表中。你可以用它吗?当然。你应该用吗?不是。在stackoverflow上有大量使用事件的示例,但为了清晰起见,他们正在使用它。使用该代码时,需要对其进行编辑。