[英]Uncaught ReferenceError function is not defined
我有一個名為myVar
的變量。 單擊復選框時,其值會更改。 單擊復選框后,您將獲得一個警報框,其值為1。取消選擇該框時,它將再次顯示一個值為0的警報框。這是正確的。
現在我有兩個問題。
當我嘗試通過單擊Submit
文檔時,由於Uncaught ReferenceError: confirm_submit is not defined
我收到一個錯誤Uncaught ReferenceError: confirm_submit is not defined
。 為什么?
當我將confirm_submit
函數置於ready event
我沒有收到錯誤,但是在那種情況下,位於confirm_submit函數內部的第二個警報框顯示myVar
undefined
。 為什么? 在confirm_submit
函數中無法訪問myVar
嗎?
碼:
<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中沒有塊作用域。 在函數中聲明的所有內容均由編譯器首先聲明,而不管塊是什么。 所以...
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);
})();
function myVar() {
if (document.getElementById('myVar').checked === true) {
myVar = 1;
} else {
myVar = 0;
}
alert(myVar);
}
那只會工作一次。 一旦輸入函數myVar
您將其值(函數是JS中的對象)替換為1或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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.