使用事件处理程序时出现全局变量问题(基本Javascript)

使用事件处理程序时出现全局变量问题(基本Javascript),javascript,Javascript,最近,我在使用DOM事件处理程序时遇到了一个问题。接下来,我将描述与问题相关的内容: 代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <form > <input id="b1" type="submit" v

最近,我在使用DOM事件处理程序时遇到了一个问题。接下来,我将描述与问题相关的内容:

代码

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <form >
        <input id="b1" type="submit"  value="Click" />

    </form>

    <script>
       //global variable 
       var v= 0;

       var b1= document.getElementById("b1");

       b1.addEventListener("click", f1, false);

       function f1() {
           window.alert(++v);
       }

    </script>

</body>
</html>

//全局变量
var v=0;
var b1=document.getElementById(“b1”);
b1.addEventListener(“单击”,f1,false);
函数f1(){
窗口报警(++v);
}
代码应该如何工作?

当按下按钮(b1)时,全局变量(v)会在每次单击按钮时逐渐增加其值。窗口将警告新值

问题:

变量没有保留它的最新值。例如,当我单击按钮两次时,窗口应该警告2,但我仍然得到1

断言:

  • 全局变量(v)应该将对它所做的更改保存在函数中。这是因为我直接在函数中使用它,而不使用参数
注意事项:

  • 当我在代码上直接调用函数两次时,它工作正常(而不是处理程序)

    f1()//一,

    f1()//二,

  • 我已经用Chrome和Firefox对它进行了测试

那么,这里发生了什么?为什么它不能正常工作?事件处理程序与全局变量的工作方式是否不同


希望你们能帮助我!谢谢

您需要在submit处理程序上添加一个表单,以取消提交。正在重置该值,因为页面已重新加载

<form onsubmit="return false;">
    <input id="b1" type="submit"  value="Click" />

</form>

您需要在submit处理程序中添加一个表单来取消提交。正在重置该值,因为页面已重新加载

<form onsubmit="return false;">
    <input id="b1" type="submit"  value="Click" />

</form>

您需要在submit处理程序中添加一个表单来取消提交。正在重置该值,因为页面已重新加载

<form onsubmit="return false;">
    <input id="b1" type="submit"  value="Click" />

</form>

您需要在submit处理程序中添加一个表单来取消提交。正在重置该值,因为页面已重新加载

<form onsubmit="return false;">
    <input id="b1" type="submit"  value="Click" />

</form>

此问题是“提交”按钮正在提交表单,很可能导致页面刷新并将
v
重置为0。您可以使用传递给回调函数的事件对象上的
preventDefault
方法来防止这种行为:

//global variable 
var v= 0;

var b1 = document.getElementById("b1");
b1.addEventListener("click", f1, false);

// e is the event object
function f1(e) {
    // calling preventDefault will prevent the form from being submitted
    e.preventDefault();
    console.log("b1 click", ++v)
}

只是一个文体注释,使用
++v
会让人困惑。您最好使用
v+=1

此问题是提交按钮正在提交表单,很可能导致页面刷新并将
v
重置为0。您可以使用传递给回调函数的事件对象上的
preventDefault
方法来防止这种行为:

//global variable 
var v= 0;

var b1 = document.getElementById("b1");
b1.addEventListener("click", f1, false);

// e is the event object
function f1(e) {
    // calling preventDefault will prevent the form from being submitted
    e.preventDefault();
    console.log("b1 click", ++v)
}

只是一个文体注释,使用
++v
会让人困惑。您最好使用
v+=1

此问题是提交按钮正在提交表单,很可能导致页面刷新并将
v
重置为0。您可以使用传递给回调函数的事件对象上的
preventDefault
方法来防止这种行为:

//global variable 
var v= 0;

var b1 = document.getElementById("b1");
b1.addEventListener("click", f1, false);

// e is the event object
function f1(e) {
    // calling preventDefault will prevent the form from being submitted
    e.preventDefault();
    console.log("b1 click", ++v)
}

只是一个文体注释,使用
++v
会让人困惑。您最好使用
v+=1

此问题是提交按钮正在提交表单,很可能导致页面刷新并将
v
重置为0。您可以使用传递给回调函数的事件对象上的
preventDefault
方法来防止这种行为:

//global variable 
var v= 0;

var b1 = document.getElementById("b1");
b1.addEventListener("click", f1, false);

// e is the event object
function f1(e) {
    // calling preventDefault will prevent the form from being submitted
    e.preventDefault();
    console.log("b1 click", ++v)
}

只是一个文体注释,使用
++v
会让人困惑。您最好使用
v+=1

如前所述,您会看到这种行为,因为单击按钮会提交表单并重新加载页面


最简单的解决方案是删除
元素。

正如已经建立的那样,您会看到这种行为,因为单击按钮提交表单并重新加载页面


最简单的解决方案是删除
元素。

正如已经建立的那样,您会看到这种行为,因为单击按钮提交表单并重新加载页面


最简单的解决方案是删除
元素。

正如已经建立的那样,您会看到这种行为,因为单击按钮提交表单并重新加载页面


最简单的解决方案是删除
元素。

将JavaScript事件处理程序直接放在HTML中不是好的做法。将JavaScript事件处理程序直接放在HTML中不是好的做法。将JavaScript事件处理程序直接放在HTML中不是好的做法。将JavaScript事件处理程序放在HTML中不是好的做法直接在HTML中使用处理程序。@torazaburo:函数声明被挂起。@torazaburo:函数声明被挂起。@torazaburo:函数声明被挂起。@torazaburo:函数声明被挂起。