我有以下代码扩展了JQuery并为JQuery添加了一个方法:
i have the following code which extends the JQuery and adds a method to the JQuery:
$.fn.attachWithMessage = function () { $(this).focusin(showMessage()); } function showMessage() { alert('hi'); }所以我可以按如下方式使用该代码:
so I can use that code as follows :
<input type="text" name="name" id="textbox" /> $(document).ready(function () { $("#textbox").attachWithMessage (); });当我第一次加载页面时,会出现一个消息框('hi')消息。
when I load the page for the first time, a message box shows up with ('hi') message.
即使我没有在文本框中单击。
even if I didn't click in the text box.
我也试过了点击事件,消息仍然自动显示。
I also tried the click event, and the message still shows automatically.
任何想法?
推荐答案这里的问题是当你将 showMessage()作为参数传递给 focusin 时,函数 showMessage 已执行,返回值会传递至 focusin 。
The issue here is that when you pass showMessage() as a parameter to focusin, the function showMessage is executed and the return value is passed to focusin.
相反,你需要传递对函数的引用(没有paranthesis)。
Instead you need to pass a reference to the function (without the paranthesis).
使用以下代码extend:
Use the following code to extend:
$.fn.attachWithMessage = function () { $(this).focusin(showMessage); }工作示例@ jsfiddle/eXEP5/
编辑: 如果你想将参数传递给showMessage,那么试试这个:
If you want to pass a parameter to showMessage then try this:
$.fn.attachWithMessage = function () { var param1 = "Some Param"; $(this).focusin(function(){ showMessage(param1); //Make sure showMessage is modified accordingly for the parameters. }); }更多推荐
即使未引发事件,也始终调用Javascript,事件处理程序
发布评论