我正在尝试重新熟悉 jQuery,但入门时遇到困难。
在下面的代码中,我想说“当 DOM 准备就绪时,将警报绑定(bind)到“choice”div 的更改事件,该 div 实际上是表单上的一个选择元素。当我通过警报立即显示,并且当我做出新选择时不显示。
代码如下:
$(document).ready(doBind());
function doBind() {
$('#choice').change(myAlert('Choice has been changed!'));
}
function myAlert($msg) {
alert($msg);
}
最佳答案
您需要区分函数引用和调用(调用)。当您关联事件处理程序或回调时,您需要一个函数引用,然后在适当的时间调用该函数。一旦传递参数并将 (..)
(或空 ()
)添加到函数引用中,就会调用。如果您在绑定(bind)期间执行此操作,则该函数将在绑定(bind)时被调用,并且该函数的输出将被绑定(bind),而不是绑定(bind)引用(这将允许通常预期的稍后调用)。
您应该按如下方式更改两个绑定(bind):
$(document).ready(doBind); //Now a reference to that function
function doBind() {
$('#choice').change(function() { myAlert('Choice has been changed!');});
//New anonymous function reference which allows for arguments and is conventionally used
}
function myAlert($msg) {
alert($msg);
}
几个简单的示例来突出语法差异和 ()
的使用。
下面的函数将采用函数引用。作为参数,然后在内部执行它(处理程序和回调的基本工作方式)。
functionWrapper = function(funk) {
//Do something else
funk()
}
现在流行的匿名函数声明后立即调用:函数通常会被写成function() {...}()
,这会导致对新创建的函数的引用立即被调用提供的任何参数(在 JavaScript 中用于强制作用域)。任何一种情况下的参数都可以用作函数中的参数,因此调用 (..)
中的任何内容都会映射到 function(..)
中声明的内容但关注引用与调用是您问题的主要问题。
关于jquery - 与 jQuery 的简单绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12657836/