2013-07-13 55 views
1

僅當事件句柄()在正文加載後產生輸出後才觸發事件(將輸入元素集中)。註釋是由事件Firing調用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> 

如果我在目標ie上觸發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> 

我無法理解爲什麼會出現錯誤,它就會如何解決

回答

1

首先,我不知道你爲什麼叫這樣的eventhandle,我的意思是eventhandle()?事件句柄不是直接調用的,它會在事件觸發後調用。

其次,你得到了錯誤,因爲當調用eventhandle函數時,你的頁面沒有被完全加載。您應該使用的window.onload = your_handler第一

+0

我調用了eventhandle()來測試JavaScript是否在JavaScript執行之前解釋事件處理函數,就像任何其他函數聲明一樣。我甚至在觸發事件之前解釋函數。 –

+0

這個錯誤是我關注輸入元素時遇到的問題。 –

+0

我認爲你的事件處理程序聲明應該是:'function eventhandle(event){//對你的事件做一些事情}' – Rikky

1

I cant understand why the error occurs

在你手動調用eventhandle()的那一刻,是不會觸發事件,那麼全球event變量沒有一個值。

and how it gets resolved

正如你可以在這裏看到,發出呼叫的代碼的結束,實際上並沒有解決問題:http://jsfiddle.net/M7rXK/。問題仍然是一樣的。

+0

但爲什麼警報(事件)的作品。 –

+0

@chetanmehta:全局變量'event'始終存在(至少在IE和Chrome中),但沒有事件觸發時它沒有值。 –

+0

你還不明白的是什麼? 'window.event'只有在觸發實際事件時纔有值。您正在手動調用'eventhandle',即* not *來響應事件,因此'window.event'是'undefined'。 –

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> 
+0

在IE 8中不起作用 – HMR

+0

我沒有兼容瀏覽器的經驗,可能是你首先聲明句柄,然後綁定句柄。或者如果你有其他的解決方案,請告訴我 – Rikky

+0

@ ricky-for ie8使用AttachEvent –

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以打開控制檯並查看控制檯消息,但如果它未打開,則不會生成錯誤。

相關問題