0

我有一个名为myVar. 当您单击复选框时,它的值会发生变化。单击复选框时,您将看到一个显示其值为 1 的警报框。当您取消选择它时,它将再次显示一个值为 0 的警报框。这是正确的。

现在我有2个问题。

  1. 当我尝试通过单击提交文档时,Submit我收到错误消息Uncaught ReferenceError: confirm_submit is not defined。为什么?

  2. 当我将confirm_submit函数从. 为什么?函数内不可访问吗?ready eventundefinedmyVarmyVarconfirm_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>
4

3 回答 3

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);
})(); 
于 2013-07-03T10:53:16.133 回答
2
function myVar() {
    if (document.getElementById('myVar').checked === true) {
        myVar = 1;
    } else {
        myVar = 0;
    }
    alert(myVar);
}

那只会工作一次。一旦你输入函数myVar,你就会用 1 或 0 替换它的值(函数在 JS 中是一个对象),它不再是一个函数对象,而是一个数字。

于 2013-07-03T10:40:33.873 回答
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;
于 2013-07-03T10:41:06.250 回答