即使未引发事件,也始终调用Javascript,事件处理程序

时间:2011-08-04 12:43:09

标签: javascript jquery event-handling

我有以下代码扩展了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')消息。

即使我没有点击文本框。

我也尝试了点击事件,消息仍会自动显示。

任何想法??

2 个答案:

答案 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);

希望这有帮助