如何让onclick事件只工作一次

Ale*_*lex 6 javascript popup

嗨,我是javascript的新手.这是我的代码.我想要做的是当有人点击页面中的任何地方.将打开一个新窗口,但我希望这只发生一次,所以当有人再次点击正文时,该功能不应该运行.有什么建议?请不要jquery

<!DOCTYPE html>
<html>

<body onclick="myFunction()>

<script>

    function myFunction() {

        window.open("http://www.w3schools.com");

    }

    </script>

</body>

</html>
Run Code Online (Sandbox Code Playgroud)

Ger*_*ado 11

简短的解决方案:

<body onclick="myFunction(); this.onclick=null;">
Run Code Online (Sandbox Code Playgroud)

核实:

<button onclick="myFunction(); this.onclick=null;">This button works only once</button>
<button onclick="myFunction()">This button works always</button>

<script>

    function myFunction() {
        console.log("hello");
    }

</script>

</body>
Run Code Online (Sandbox Code Playgroud)


z0m*_*Bi3 5

有几种方法可以做到这一点.

1.在脚本中将事件侦听器添加到body,然后单击一次删除.

<!DOCTYPE html>
<html>
<body>
<script>
    document.body.addEventListener('click', myFunction);
    function myFunction() {
        window.open("http://www.w3schools.com");
        document.body.removeEventListener('click', myFunction);
    }
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

2.有一个标志来检查函数是否已被调用.

<!DOCTYPE html>
<html>
<body onclick="myFunction()">
<script>
    var isBodyClicked = false;
    function myFunction() {
      if(isBodyClicked === false){
        window.open("http://www.w3schools.com");
        document.body.removeEventListener('click', myFunction);
      }
      isBodyClicked = true;
    }
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)


小智 5

使用“曾经”中的“选项”参数addEventListener的方法是unironically足够使用一次函数的一个好方法。

function myFunction(){
    console.log("hey")
}

document.body.addEventListener("click", myFunction,{once:true})
Run Code Online (Sandbox Code Playgroud)