我有一个自我调用的javascript文件,我试图在我的onClick事件中获取moduleID。
我在这里做错了什么?需要注意的另一件事是,我将其中的几个文件包含在" Widgets"都有自己的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
});
答案 0 :(得分:1)
无法在函数外部访问函数内定义的任何内容。
您可以做的是将您的绑定放在$(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准备就绪时调用该函数。
答案 1 :(得分:0)
它不是关于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);
});
});
答案 2 :(得分:0)
问题的功能是呼叫.ready()
,而不是IIFE。在moduleID
处理程序中可以使用.ready()
,但您也可以使用.data()
将moduleID
,output
附加到document
作为document
.data()
.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" />
{{1}}
答案 3 :(得分:0)
$(function(){var a,b,c;})函数内部定义的所有变量(如a,b,c)在外部都不可用。您可以将其视为一个附件。 1.将var定义为全局变量; 2.像“window.xxx = var(像a,b,c)”那样导出var 3.导出一个可以访问var
的函数