2011-08-04 191 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

两个答案都是正确的,并被放在同一时间。 –

相关问题