-4

我有一个获取键盘键值的函数。我想知道为什么我们需要在参数中使用事件

<form>
Char: <input type="text" id="char" size="15" /> Keycode: <input type="text" id="keycode" size="15" />
</form>

<script type="text/javascript">

var charfield=document.getElementById("char")
charfield.onkeydown=function(event){
//var e=window.event || e
document.getElementById("keycode").value=event.keyCode
}

</script>
4

3 回答 3

1

不同的浏览器有不同的事件模型。线

var e=window.event || e

用于不带事件函数参数的 Internet Explorer。

有关更多信息,请参阅本文。

于 2012-08-09T07:40:13.973 回答
1
charfield.onkeydown = function(event){ ... }

在这里,参数 event或有时用作的只是Event 对象e一个​​实例。它是赋予该实例的变量名。触发事件时会自动传递给。event objectevent handler

事件对象为事件处理程序提供了一些有用的属性和方法。

于 2012-08-09T07:44:13.423 回答
1

JS 是EVENT DRIVEN,无法访问事件对象将与您的自行车在 F1 比赛:您可以看到比赛(汽车 === 事件)飞过,但您无法接近它们......(抱歉可怕的类比,但你明白了)。
要增加/启用更多的交互性,您必须知道客户端做了什么,以便做出相应的响应。例如,如果用户单击,您可能想知道他在页面上单击的位置。所有这些以及更多内容都可以在事件对象中找到。没有那个,就像去打仗,手无寸铁,双手被绑在背后,蒙着眼睛。

想一想:在任何其他事件至关重要的编程语言(如 C++、C#、Java、ActionScript ......)中,你不会问同样的问题,任何直接从用户那里获得输入的东西,真的。

好吧,两个答案(AlphaMale 和 chiborg)都告诉了您事件对象的用途。但是,该行var e= window.event || e;不适用于您的情况,因为您将默认运算符弄乱了。试试这个:

charfield.onkeydown = function (e)//call parameter e, rather then event
{
    e = e || window.event;//no var, as a parameter, it's already declared, won't set a global
    var key = e.keyCode || e.which;//another default operator here... thx to IE
    //and so on

    if (e.preventDefault)
    {
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
    e.returnValue = false;
    e.cancelBubble = true;
};

因此,这里有一小部分您可以(并且经常会)在事件对象上使用的方法。

e = e || window.event;e = e !== undefined ? e : window.event;由于 IE 不将事件对象传递给处理程序相同,因此您必须自己获取它(它是全局对象的属性,因此是window.)。为什么这对您不起作用是因为您为 JS 引擎提供了window.event(仅限 IE)和之间的选择e,您声明的是实际事件对象存储在event参数中。你应该写event = event || window.event;

第二行var key = e.keyCode || e.which;获取按下的键的键码,IE 和 W3C 再次同意不同意该属性的名称。事实上,他们一直都同意的只有 1 个属性:type这里还有一些属性

最后,我调用了一些方法来阻止/阻止事件。假设您要一个电话号码,而用户开始输入文本。使用任何onkey*你可以接受的事件,并使用preventDefault方法stopPropagation来阻止输入被接受。(除此之外还有更多内容,但我现在不打算讨论)。
大多数浏览器都有这些方法,但是 IE 有一个不同的事件模型,所有这些都在这里详细阅读它returnValue随之而来的是在 IE:和属性的轨道上停止事件的不同方式cancelBubble,后者特别烦人,因为如果您不想要某些东西,则将其设置为true发生......但这只是我的意见。

您可以使用 event 参数做更多事情,但简而言之 - 再次 - JS 是EVENT DRIVEN ,无法访问事件对象会让你瘫痪......

于 2012-08-09T10:24:07.680 回答