1

我仅在 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

4 回答 4

1

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

其次,你得到了错误,因为当调用事件句柄函数时,你的页面没有完全加载。你应该先使用 window.onload = your_handler

于 2013-07-13T11:16:03.310 回答
1

我不明白为什么会发生错误

在您eventhandle()手动调用的那一刻,没有触发任何事件,因此全局event变量没有值。

以及如何解决

正如您在此处看到的,将调用放在代码末尾实际上并不能解决错误:http: //jsfiddle.net/M7rXK/。问题还是一样。

于 2013-07-13T11:24:32.717 回答
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>
于 2013-07-13T11:45:58.850 回答
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 才能打开控制台并查看控制台消息,但如果未打开它不会产生错误。

于 2013-07-13T11:52:38.743 回答