为什么我们使用Javascript事件

时间:2012-08-09 07:37:18

标签: javascript events

我有一个获取键盘键值的功能。我想知道为什么我们需要在参数

中使用事件
<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>

3 个答案:

答案 0 :(得分:1)

Different Browsers have different event models。这条线

var e=window.event || e

适用于不接受事件功能参数的Internet Explorer。

有关详情,请参阅this article

答案 1 :(得分:1)

charfield.onkeydown = function(event){ ... }

此处,参数 event或有时仅用作e事件对象的实例 。它是为该实例指定的变量名。当事件触发时,event object会自动传递给event handler

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

答案 2 :(得分: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没有将事件对象传递给处理程序,所以你必须自己获取它(它是全局对象的属性,因此{{ 1}})。为什么这对你不起作用是因为你给了JS引擎在window.(仅限IE)和window.event之间的选择,你要声明的是,实际的事件对象存储在{{1参数。你应该写e

第二行event获取了按键的关键代码,IE和W3C同意不同意该属性应该被调用的内容。实际上只有一个属性,他们一直同意:event = event || window.event;Some more properties here

最后,我调用了几种允许您阻止/阻止事件的方法。假设您要求输入电话号码并且用户开始输入文本。使用您可以接收的任何var key = e.keyCode || e.which;事件,并使用typeonkey*方法停止输入已接受。 (还有一点比这更多,但我现在还没有进入那个)。再次大多数浏览器都有这些方法,但IE有一个不同的事件模型read about it at length here和随之而来的是为IE停止事件的不同看法:preventDefaultstopPropagation属性,后者特别令人讨厌,因为如果你想要一些不是< / strong>发生......但这只是我的意见。

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