我有一个名为myVar
的变量。单击复选框时,其值会更改。单击复选框后,您将看到一个警告框,其值显示为1.当您取消选中它时,它将再次显示一个值为0的警告框。这是正确的。
现在我有两个问题。
当我尝试通过点击Submit
提交文档时,我收到错误Uncaught ReferenceError: confirm_submit is not defined
。为什么呢?
当我将confirm_submit
函数从ready event
中删除时,我没有收到错误但在那种情况下,在confirm_submit函数内的第二个警告框显示{{ 1}} undefined
。为什么? myVar
功能无法访问myVar
吗?
代码:
confirm_submit
答案 0 :(得分:3)
您似乎未能掌握一些基本概念,一些JavaScript编程基础知识。
function myVar() {
...
alert(myVar);
}
你期望在这里发生什么? myVar函数和myVar这个范围内的变量是一回事。如果声明一个变量然后声明一个具有相同名称的函数,该函数将替换堆栈中的变量。此外,JavaScript中没有块范围。函数中声明的所有内容都由编译器首先声明,而不管块是什么。所以......
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);
})();
答案 1 :(得分:2)
function myVar() {
if (document.getElementById('myVar').checked === true) {
myVar = 1;
} else {
myVar = 0;
}
alert(myVar);
}
那只会工作一次。一旦输入函数myVar
,您将用1或0替换它的值(函数是JS中的对象),它将不再是函数对象,而是数字。
答案 2 :(得分:0)
问题是......你的var和输入元素有相同的名称..
document.myform.myVar.value = myVar;
所以要么将输入元素的id更改为其他变量,要么更改所有myVar名称
<input type="checkbox" name="myVar" id="inputId" value="myVar">Text here
document.myform.inputId.value = myVar;