Javascript,事件处理程序总是被调用,即使事件没有被引发



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

即使我没有点击文本框

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

有什么想法吗??

这里的问题是,当您将showMessage()作为参数传递给focusin时,函数showMessage执行返回值传递给focusin

相反,你需要传递一个对函数的引用(不带括号)。

使用以下代码进行扩展:

$.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.
  }); 
} 

去掉括号

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

$(this).focusin(showMessage);

希望能有所帮助

相关内容

  • 没有找到相关文章

最新更新