我有一个自调用的javascript文件,我正在尝试在我的moduleID事件中获取onClick。
我在这里做错什么了?另外要注意的是,我已经将其中的几个文件作为“小部件”包括在它们自己的moduleID中。我担心如果我将这个变量声明移到上面,使它成为全局的,那么它是否会干扰其他也声明moduleID变量的小部件呢?
$(function() {
// Define our vars
var moduleID = 4,
output = '';
... Some more stuff ...
});
//Listen for button click
$('[name=adminSearchGo]').click(function() {
alert(moduleID); // No Access
});发布于 2016-07-03 02:53:19
函数内部定义的任何内容都不能在函数外部访问。
您可以做的是将您的绑定放在$(function(){...})中,以便它可以看到变量。
$(function() {
// Define our vars
var moduleID = 4,
output = '';
//Listen for button click
$('[name=adminSearchGo]').click(function() {
alert(moduleID); // No Access
});
});另外,根据这个脚本的运行位置,将.click绑定放在$(function(){...})之外可能无法工作,因为元素可能还不存在。$(function(){...})的全部目的是在DOM准备就绪时调用该函数。
发布于 2016-07-03 02:53:15
这不是关于jQuery,而是关于javascript变量范围。
您可以参考以下内容:
What is the scope of variables in JavaScript?
至于解决方案,您说这些文件都包含在小部件中,所以最好将一个模块的所有行为放在这个模块中。如下所示:
$(function() {
// Define our vars
var moduleID = 4,
output = '';
... Some more stuff ...
//Listen for button click
$('[name=adminSearchGo]').click(function() {
alert(moduleID);
});
});发布于 2016-07-03 03:00:35
问题中的函数是调用.ready(),而不是生命。moduleID在.ready()处理程序中是可用的,尽管您也可以利用.data()将moduleID、output作为document .data()对象中的数组附加到document;使用单独的.ready():$(function(){})处理程序来设置.data()。注意,目前this是document在.ready()处理程序内:$(function(){})
$(function() {
// Define our vars
var moduleID = 4,
output = '';
$(this).data({
"moduleID": [moduleID],
output: [output]
})
// ... Some more stuff ...
});
$(function() {
// Define our vars
var moduleID = 5,
output = "abc";
$(this).data().moduleID.push(moduleID);
$(this).data().output.push(output);
// ... Some more stuff ...
});
$(function() {
// Define our vars
var moduleID = 6,
output = "def";
$(this).data().moduleID.push(moduleID);
$(this).data().output.push(output);
//Listen for button click
$("[name=adminSearchGo]").click(function() {
alert($(document).data().moduleID[0]); // No Access
});
console.log($(document).data())
})<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" name="adminSearchGo" value="click" />
https://stackoverflow.com/questions/38166292
复制相似问题