2016-04-15 73 views
2

在幾乎所有的例子中,「事件」對象作爲參數傳遞:爲什麼event.preventDefault()在jQuery中的某些情況下在沒有將事件作爲參數傳遞給回調函數的情況下工作?

$('a').on('click', function(event) { 
    event.preventDefault(); 
} 

但是,似乎這也適用於防止錨的默認行爲:

$('a').on('click', function() { 
    event.preventDefault(); 
} 

人詳細說明爲什麼第二個仍然有效,還有什麼缺點?

+0

在Firefox上試一下,它會失敗。 :P – RRK

+0

沒有提供論點,你不能確定第二個將在所有的地方工作。 – RRK

+0

可能是一些瀏覽器正在修復你的錯誤...? –

回答

1

event.preventDefault()無論如何。隱event代表DOM的MouseEvent,如果你發送一個console.log(event)沒有事件參數,你會檢查,看看:

$('#my_button').on('click', function() { 
 
    console.log(event); 
 
    
 
    // 1. Press F12 or Ctrl + Shift + I and check the console 
 
    // 2. Click the button after run it 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="button" id="my_button" value="my_button" />

當你調用事件沒有參數您呼叫的默認對象表示的別名。你可以通過傳遞另一個別名如「e」或「evt」來接受它,但是當你稱之爲「事件」時,你做同樣的事情,然後沒有它的呼叫(因爲你將使用「事件」)。

在我的想法中,沒有缺點,因爲它只是「使用模式」。

+0

這樣你就可以確定你所調用的事件與你觸發的回調相同和相對。沒有機會打電話錯誤。 – RPichioli

+0

我按照評論中的一些人的建議,並沒有通過「事件」作爲論點似乎不適用於Firefox。我想最好的做法是始終使用參數 – Kylie

+0

當然,這不是一種模式,而是遵循文檔始終工作。 – RPichioli

相關問題