如何修复这个jQuery范围错误
How to fix this jQuery Scope mistake?
我无法在这段代码中弄清楚,我认为这是一个范围问题。
我有以下javascript片段
<javascript language="javascript>
$(function() {
$("#dialog").dialog({
autoOpen: false
});
function getMessage(direction, msgId) {
return "This is an " + direction + " message with ID: " + msgId;
}
function showMessage(direction, msgId) {
$("#dialog").text(getMessage(direction, msgId));
$("#dialog").dialog('open');
}
});
</script>
我想这样命名它
<div id="dialog" title="Message Info"></div>
<input type="button" id="btnCommand1" value="Command 1" onclick="javascript: showMessage('Outgoing', 1000487874')" />
<input type="button" id="btnCommand2" value="Command 2" onclick="javascript: showMessage('Incoming', 2000237851')" />
我明白,我可以通过jQuery绑定点击事件也但是因为我是动态创建这些按钮的,所以我需要像上面提到的那样调用它。问题我得到一个错误,showMessage()没有定义。我发现,一般来说,在jQuery作用域$(function(){})内定义的方法不能从这个作用域外访问!如何解决这个问题?
javascript:
这是一个标签,并不意味着"这是JavaScript代码"。你指定onclick属性包含带有元数据的JavaScript。
因为我是动态创建这些按钮的,所以我需要像上面提到的那样调用它。
这是一个错误的前提。
我发现在jQuery范围内定义的一般方法$(function(){})不能从这个范围外访问!如何解决这个问题?
将函数移出匿名函数
您不需要将所有内容都放入$()
就绪处理程序中。它只是用来检查页面是否准备好。
延迟绑定很好,所以让我们让它工作起来。我们怎么解决这个问题呢?
使用live()
绑定jQuery的$()
函数:
$(function(){
....
function showMessage(direction, msgId) {
$("#dialog").text(getMessage(direction, msgId));
$("#dialog").dialog('open');
}
$("#button1").live("click", function(){
showMessage('Outgoing', 1000487874);
});
});
如果参数是动态的,可以将它们作为数据属性包含:
<input type="button" id="btnCommand1" value="Command 1" data-param1="Outgoing" data-param2="1000487874" />
并像这样访问它们:
$("#button1").live("click", function(){
showMessage($(this).attr("data-param1"), $(this).attr("data-param2"));
});
我也注意到你的HTML onlick属性有一个小错误,在数字的末尾有一个额外的引号:
onclick="javascript: showMessage('Outgoing', 1000487874')"
//should be:
onclick="javascript: showMessage('Outgoing', 1000487874)"
//or:
onclick="javascript: showMessage('Outgoing', '1000487874')"
因为你是从全局作用域中调用的,所以JS方法也需要在相同的作用域中。
你有两个选择。
-
你可以使用jquery绑定使用
.live
,所以不管它是否动态创建。 -
您可以将方法移出
$(function(){})
并放入全局作用域。
相关文章:
- 日志:未捕获的范围错误:超过了最大调用堆栈大小
- 未捕获的范围错误:setTimeout()超过了最大调用堆栈大小
- JavaScript继承:未捕获的范围错误:超过了最大调用堆栈大小
- 收到“范围错误: 超出最大调用堆栈大小”错误
- 范围错误与 mongo 进行$near查找
- 未捕获的范围错误:WebSQL查询结果中的项索引超出范围错误
- IE 8变量范围错误
- Chrome/jQuery未捕获范围错误:超过了最大调用堆栈大小(函数循环)
- AngularJS-范围错误:''之后超过了最大调用堆栈大小;应用程序启动
- javascript中的函数范围错误
- Chrome 未捕获范围错误:最大调用堆栈大小超出了点击递归
- 此节点范围错误背后的原因
- jquery .on 获取未捕获的范围错误:超出最大调用堆栈大小
- Babel/RequireJS + 类型“范围错误:超出最大调用堆栈大小”
- 范围错误:调用堆栈超出异步 .eachSeries 上的范围错误
- 复杂 JSON 处理期间的“范围错误: 超出最大调用堆栈大小”
- 范围错误:在 Javascript 中超出了最大调用堆栈大小
- 范围错误:超出最大调用堆栈大小(角度)
- 余烬错误 - 加载路由时出现“调用堆栈大小超出范围错误”
- 解决jQuery ui日期范围错误