我正在尝试弄清楚如何在JavaScript中将参数传递给匿名函数。
看看这段示例代码,我想你会明白我的意思:
<input type="button" value="Click me" id="myButton" />
<script type="text/javascript">
var myButton = document.getElementById("myButton");
var myMessage = "it's working";
myButton.onclick = function(myMessage) { alert(myMessage); };
</script>
单击按钮时,应出现消息:it's working
。但是,匿名函数中的myMessage
变量为空。
jQuery使用了很多匿名函数,传递该参数的最佳方式是什么?
发布于 2008-10-22 08:17:20
您的特定情况可以简单地更正为正常工作:
<script type="text/javascript">
var myButton = document.getElementById("myButton");
var myMessage = "it's working";
myButton.onclick = function() { alert(myMessage); };
</script>
这个例子是可行的,因为创建的匿名函数作为元素的处理程序可以访问在创建它的上下文中定义的变量。
对于记录,处理程序(通过设置onxxx属性指定)期望单个参数接受由DOM传递的事件对象,并且您不能在其中强制传递其他参数
发布于 2008-10-22 08:18:22
您所做的不起作用,因为您正在将一个事件绑定到一个函数。因此,它是定义当事件被引发时将被调用的参数的事件(即JavaScript不知道你绑定到onclick的函数中的参数,所以不能向它传递任何东西)。
但是,您可以这样做:
<input type="button" value="Click me" id="myButton"/>
<script type="text/javascript">
var myButton = document.getElementById("myButton");
var myMessage = "it's working";
var myDelegate = function(message) {
alert(message);
}
myButton.onclick = function() {
myDelegate(myMessage);
};
</script>
发布于 2010-10-17 01:40:59
下面是使用闭包解决您提到的问题的一种方法。它还考虑了这样一个事实,即可以在不影响绑定的情况下随时间改变消息。而且它使用了jQuery以使其简洁。
var msg = (function(message){
var _message = message;
return {
say:function(){alert(_message)},
change:function(message){_message = message}
};
})("My Message");
$("#myButton").click(msg.say);
https://stackoverflow.com/questions/224820
复制相似问题