我有一个名为 myVar
的变量。当您单击该复选框时,其值会发生变化。单击该复选框时,您将看到一个警报框,其值为 1。当您取消选择它时,它将再次显示一个值为 0 的警报框。这是正确的。
现在我有 2 个问题。
当我尝试通过单击“提交”来提交文档时,我收到一条错误:
Uncaught ReferenceError:confirm_submit 未定义
。为什么?当我将
confirm_submit
函数置于ready 事件
之外时,我没有收到错误,但在这种情况下,内部的第二个警报框inform_submit 函数显示myVar
的undefined
。为什么?myVar
是否无法在confirm_submit
函数中访问?
代码:
<html>
<head>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.treeTable.js"></script>
<script type="text/javascript">
var myVar;
jQuery(document).ready(function() {
$("#myTable2").treeTable({
expandable: true,
clickableNodeNames: true,
initialState: "expanded",
});
document.getElementById('myVar').addEventListener('click', myVar, false);
function myVar() {
if (document.getElementById('myVar').checked === true) {
myVar = 1;
} else {
myVar = 0;
}
alert(myVar);
}.................
some functions....................
function confirm_submit() {
alert(myVar);
if (confirm('Press OK to confirm')) {
document.myform.myVar.value = myVar;
document.myform.submit();
reload_parent_and_close_window();
}
}
and some more functions.....................
});
</script>
</head>
<body>
<form name="myform" id="myform" action="$action" method="post" onsubmit="return false;">
<input type="checkbox" name="myVar" id="myVar" value="myVar">Text here
</form>
<a href="javascript:confirm_submit()">Submit</a>
</body>
</html>
最佳答案
您似乎未能掌握一些基本概念,一些 JavaScript 和一些编程基础知识。
function myVar() {
...
alert(myVar);
}
您预计这里会发生什么? myVar 函数和 myVar 在此范围内的变量是同一件事。如果声明一个变量,然后声明一个同名的函数,该函数将替换堆栈中的变量。另外,JavaScript 中没有 block 作用域。函数中声明的所有内容都首先由编译器声明,无论 block 如何。所以...
function a() {
var a = 1;
if (1) {
var b = 4;
alert(b);
}
alert(b);
}
不要假设作用域与 Java 或 C++ 相同。
另外,如果你想让某些东西显式地全局化,那么就让它显式化。尝试将 myVar 函数重命名为诸如“onClick_myVar”之类的合理名称。然后在声明函数之前,将函数放入闭包中并声明状态变量:
(function() { // Closure
var myVar;
function onClick_myVar() {
if ($(this).getattr("checked")) {
myVar = 1;
} else {
myVar = 0;
}
alert(myVar);
}
$('#myVar').click(onClick_myVar);
})();
关于javascript - 未捕获的 ReferenceError 函数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445771/