2017-09-12 57 views
6
element.onkeypress = function(e) { 
        if(e.keyCode) { 
         element.keyCode = e.keyCode; 
        } else { 
         element.keyCode = e.charCode; 
        } 
       }; 

而且在Java腳本,還有用於事件的參數是什麼?我怎麼知道?

<input onChange="a(event)"/> 
<script> 
function a(event) { 
    alert(event.target.value); 
} 
</script> 

作爲參數接收,我怎麼知道,如果我必須把事件參數,而不是電子?第二個例子不會工作,如果它的參數是除事件以外的任何東西都不是JavaScript?

+1

正如有人誰只用JavaScript修補匠偶爾,我一直運行到這個問題。我查看它,然後下一次我不記得了。有興趣的這個問題,所以我可以回到它下一次發生... – domsson

+0

參數名稱是無關緊要的。 –

回答

0

function(e)是一個帶參數的正常函數。參數可以有任何你想要的名字。

裏面onkeypress,瀏覽器提供的事件有一個特殊的參數,總是命名爲event。如果你將它傳遞給你自己的函數,那麼該函數可以像往常一樣使用它想要的任何參數名稱。

0

當使用現代標準設置事件回調時,客戶端會自動將事件對象的引用傳遞到每個事件回調函數中。它將永遠是第一個參數。

你不需要做任何事情來實現這一點。所有你需要做的就是捕獲參考,你可以用你喜歡的任何命名參數來做到這一點。既然你是爭論的接受者,你選擇的名字不必與任何東西匹配。你可以稱它爲任何東西(這是一個有效的標識符)。現在

,你的例子只是工作,因爲在一個網頁的全球範圍的window對象公開一個event對象,這就是a(event)正在訪問:

<input onChange="a(event)"/> 
<script> 
    function a(event) { 
    alert(event.target.value); 
    } 
</script> 

但是,這不是現代應該建立事件的方式。不應使用內聯HTML事件屬性(onclick,onchange等)(here's why)。

現代方法如下,注意事件回調函數(a)的註冊並不表示任何關於事件的信息,但實際函數只是通過期望參數就能獲得它所需的信息。

document.querySelector("input").addEventListener("change", a); 
 
function a(anyNameIsGoodHere) { 
 
    alert(anyNameIsGoodHere.target.value); 
 
}
<div>Type anything into the text field and then hit TAB</div> 
 
<input>

+0

嗨,我使用角2.0,我怎麼知道什麼類型的事件是addeventlistener的副本? ssorry,我沒有太多關於所有這些的概念,就像他們是如何一起使用的......怎樣才能將javascript轉換成角度爲2.0的模塊? – newB

+0

'.addEventListener()'不是一個事件。這是註冊事件處理函數的DOM API標準方法。您可以使用它來註冊任何事件。在我上面的示例中,我使用它來註冊一個名爲'a'的函數,以在發生'input'元素的'change'事件時觸發。 –

3

當您綁定使用on*屬性或addEventListener的事件處理程序,該事件對象將作爲第一參數傳遞。您可以像往常一樣在編寫函數表達式或函數聲明時自己命名它。您可以命名參數的常規限制適用(即它們必須是有效的標識符名稱)。 event,eevt是該變量的通用名稱。

當您綁定使用on*屬性的事件處理程序,你正在寫僅功能體(即function (event) {}暗示。事件對象將在event變量是可用的。

-1

當定義一個函數,你可以調用任何你想要的參數(event,e,foo等...),當你調用函數時,你必須使用傳遞給函數的任何名稱。

<input onChange="a(event)"/> 
    <script> 
    function a(foo) { 
     alert(foo.target.value); 
    } 
    </script> 

<input onChange="b(event)"/> 
    <script> 
    function b(aParameter) { 
     alert(aParameter.target.value); 
    } 
    </script> 
0

通過在每個事件之後添加console.log(「some text here」),您可以找到哪些參數在特定事件上被觸發。

你可以看到你的日誌在控制檯

相關問題