我有以下代码扩展了JQuery并为JQuery添加了一个方法:
$.fn.attachWithMessage = function () {
$(this).focusin(showMessage());
}
function showMessage() {
alert('hi');
}
所以我可以按如下方式使用该代码:
<input type="text" name="name" id="textbox" />
$(document).ready(function () {
$("#textbox").attachWithMessage ();
});
当我第一次加载页面时,会出现一个消息框,显示('hi')消息。
即使我没有点击文本框。
我也尝试了点击事件,消息仍会自动显示。
任何想法??
答案 0 :(得分:5)
此处的问题是,当您将showMessage()
作为参数传递给focusin
时,函数showMessage
已执行且返回值< / strong>传递给focusin
。
相反,你需要传递对函数的引用(没有paranthesis)。
使用以下代码进行扩展:
$.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.
});
}
答案 1 :(得分:2)
只需删除括号
即可$(this).focusin(showMessage());
应该是
$(this).focusin(showMessage);
希望这有帮助