2012-11-28 21 views
2

所以我試圖獲得先進的Javascript技能。所以我在Lynda.com上做了一個實用的JS教程。第3章在EventHandlers上,我有點困惑(注意:我刪除了使腳本在所有瀏覽器中工作的代碼)。我對視頻進行了重新編排,並且根本沒有任何幫助。編寫事件處理程序時遇到了一些困惑

  1. e是指什麼?我沒有一個名爲e的變量或我能看到的任何其他變量。
  2. false是指什麼?因爲我正在處理鏈接,是否與return false相同?

    function clickLink(e) { 
        alert("You Clicked the Link"); 
    } 
    
    function linkClicked(e) { 
        addEventHandler(document.getElementById("clickLink"), "click", clickLink, false); 
    } 
    
    addEventHandler(window, "load", linkClicked, false); 
    

回答

1
  1. e僅僅是指已經發生的情況下,你可以把它改成你想要的任何東西。它只是將事件傳遞給需要使用它的各種功能等。

  2. false僅表示該事件不是'消耗'的,即如果您有多個處理程序用於同一事件,則可以由其他處理程序使用該事件。所以,是的,它實際上與return false相同。 (見下文關於冒泡我的鏈接)

here更多關於消耗事件和bubbling

+0

謝謝你們倆。這就是我對兩者的想法。但我想做的最後一件事是假設。 – deadendstreet

+0

好習慣,正如他們所說,假設是所有女性的母親,不要忘了標記你認爲最完整的答案,因爲這是一個很好的答案,可以幫助任何遇到你問題的人。 :) – agryson

0

如果您在clickLink(e)談論E,那麼我可以說,你可以宣佈你在一個javascript函數原型所需的任何參數,但調用它時,你可以在clickLink(e)提供參數optionaly.and在這裏你可以傳遞一個參數或者你可以簡單地忽略它。關於falseaddEventHandler檢查這個documentation也檢查這個SO question

例如,如果功能FO定義這樣:

function FO(e){ 
    //function body here 
} 

那麼你可以這樣調用:

FO(); 

OR

FO("BAR"); 
2

所有電子郵件首先只是一個您將在函數中收到的論點。你也可以這樣寫:

function evtHandler(){ 
    console.log(arguments[0]); 
} 

其中參數[0]是你給出的e。處理函數在事件被觸發時被調用。通常在e參數中,您有一個對象,提供有關如何觸發事件的一些信息。

當您添加一個事件處理程序時,該函數的最後一個參數是一個布爾值,它指示該句柄是否應該或不應該在事件處理程序的鏈中冒泡。這不是你會回報錯誤,但如果事件也會由其他處理程序處理。如果您想返回false或忽略先前的默認處理,則可以調用evtHandler中的preventDefault函數。

P.S.請注意事件處理程序,因爲跨瀏覽器兼容性存在一些問題;

+0

感謝您的意見。在視頻中,它提到最好是處理它,而不是隻做一個onclick(我很熟悉)。由於存在跨瀏覽器兼容性問題,按照我學習的方式執行操作會更好嗎?意思是在標記中添加onclick事件? – deadendstreet

+0

@ user1026521其實沒有,因爲你說你想獲得先進的JS技能。首先,您應該瞭解,內聯代碼對於大型應用程序是有風險的。第二件事是,即使存在兼容性問題,它也可以在3行或4行代碼中解決。 http://msdn.microsoft.com/en-us/magazine/ff728624.aspx這樣做的主要原因是在使用冒泡時可以訪問事件的句柄鏈,再加上代碼的可伸縮性。 – helly0d

+0

@ user1026521順便說一句,你不想改變你的用戶名,所以我們可以給你打電話給別人,而不是userXXXXXX?這只是本網站的社交部分。你知道我們不在監獄嗎? – helly0d

相關問題