2011-08-04 103 views
0

我有下面的代碼擴展了jQuery和增加了jQuery的方法:JavaScript中,事件處理程序始終調用,即使不引發事件

$.fn.attachWithMessage = function() { 
    $(this).focusin(showMessage()); 
} 

function showMessage() { 
    alert('hi'); 
} 

所以如下,我可以使用這些代碼:

<input type="text" name="name" id="textbox" /> 
$(document).ready(function() { 
    $("#textbox").attachWithMessage(); 
}); 

當我加載首次的頁面,一個消息框示出了(「HI」)消息。

即使我沒有在文本框中單擊。

我也嘗試了點擊事件,並且消息仍然自動顯示。

任何想法??

回答

5

的這裏的問題是,當你通過showMessage()作爲參數傳遞給focusin,功能showMessage執行返回值傳遞給focusin

相反,您需要傳遞函數的引用(沒有palenthesis)。

使用下面的代碼來擴展:

$.fn.attachWithMessage = function() { 
    $(this).focusin(showMessage); 
} 

工作例如@http://jsfiddle.net/eXEP5/

編輯: 如果你想傳遞一個參數來showMessage那就試試這個:

$.fn.attachWithMessage = function() { 
    var param1 = "Some Param"; 
    $(this).focusin(function(){ 
    showMessage(param1); //Make sure showMessage is modified accordingly for the parameters. 
    }); 
} 
+0

但如果我想傳遞一個參數,當事件被觸發到showMessage什麼??? –

+1

@Nou Sabouny:檢查更新的答案 – Chandu

+0

非常感謝。 –

2

只是刪除括號

$(this).focusin(showMessage()); 

應該

$(this).focusin(showMessage); 

希望這有助於

+0

兩個答案都是正確的,並被放在同一時間。 –

相關問題