簡體   English   中英

未定義的ReferenceError函數未定義

[英]Uncaught ReferenceError function is not defined

我有一個名為myVar的變量。 單擊復選框時,其值會更改。 單擊復選框后,您將獲得一個警報框,其值為1。取消選擇該框時,它將再次顯示一個值為0的警報框。這是正確的。

現在我有兩個問題。

  1. 當我嘗試通過單擊Submit文檔時,由於Uncaught ReferenceError: confirm_submit is not defined我收到一個錯誤Uncaught ReferenceError: confirm_submit is not defined 為什么?

  2. 當我將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM