函数调用messed事件处理

时间:2013-07-13 10:55:37

标签: javascript html function event-handling this

我只在eventhandle()在主体加载后产生输出后触发事件(聚焦输入元素)。注释是事件触发调用eventhandle时生成的输出。

<input type="text" value="xyz" ></input>
<script>
    eventhandle();
    document.getElementsByTagName("input")[0].onclick=eventhandle
    function eventhandle()
    {
        alert(this.value);//works
        alert(event);    //works
        alert(event.type)//Error for all the properties of event object
    }
</script> 

如果我在DOM上触发事件后调用eventhandle(),即

,则会解决此问题
<input type="text" value="xyz" ></input>
<script>
    document.getElementsByTagName("input")[0].onclick=eventhandle
    function eventhandle()
    {
        alert(this.value);
        alert(event.type); //works for all properties of event object
        alert(event)       //works
    }
    eventhandle();
</script>

我无法理解错误发生的原因以及解决方法

4 个答案:

答案 0 :(得分:1)

首先,我不知道为什么你这样称为事件句柄,我的意思是eventhandle()?事件句柄不是直接调用,它将在事件触发后调用。

其次,您收到错误,因为调用eventhandle函数时,您的页面未完全加载。你应该首先使用window.onload = your_handler

答案 1 :(得分:1)

  

我无法理解错误发生的原因

当您手动调用eventhandle()时,未触发任何事件,因此全局event变量没有值。

  

以及如何解决

正如您在此处所见,将调用置于代码末尾,实际上并未解决错误:http://jsfiddle.net/M7rXK/。问题仍然存在。

答案 2 :(得分:1)

好的,这是我的代码:

<input type="text" value="xyz" ></input>
<script>
    // eventhandle(); I hate this, verymuch =="
    document.getElementsByTagName("input")[0].onclick=eventhandle
    function eventhandle(event) // please parse a parameter represent the event here
    {
        alert(this.value);//works
        alert(event);    //works
        alert(event.type)// If works, plz tell me :D
    }
</script>

答案 3 :(得分:1)

Firefox中不会退出事件。以下代码应该适用于大多数浏览器:

document.getElementsByTagName("input")[0].onclick=eventhandle
function eventhandle(e)
{
    var event = e || window.event;
    console.log(this.value); // works
    console.log(event.type); //works for all properties of event object
    console.log(event)       //works
}
// trigger the click event without actually clicking on it
document.getElementsByTagName("input")[0].click();

在IE中你必须按F12打开开发人员工具才能看到console.log,否则会产生错误。在大多数其他浏览器中,您还必须按F12打开控制台并查看控制台消息,但如果它未打开则不会生成错误。