2016-08-05 16 views
1

こんにちは、私はjavascriptを初めて使っています。ここに私のコードです。 私がしたいのは、誰かがページのどこかをクリックしたときです。 新しいウィンドウが開きますが、これは一度だけ起こりたいので、誰かが再び本体をクリックしたときに関数が実行されるべきではありません。 アドバイスはありますか?何jqueryのしてくださいonclickイベントを一度だけ動作させる方法

<!DOCTYPE html> 
<html> 

<body onclick="myFunction()> 

<script> 

    function myFunction() { 

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

    } 

    </script> 

</body> 

</html> 
+0

グローバルなjavascript変数を使用してみてください。この値を最初は偽にします。ウィンドウを開く前に、この変数の値を確認してください。この変数の値がfalseの場合にのみ、ウィンドウを開きます。ウィンドウを開いたら、それをtrueに設定します。 –

+0

グローバル変数を使用 – shadowfox

+0

1:グローバルブール変数、2:myFunctionを実行するときにonclickイベントを削除する、3:... 3番目のオプションを考えることができない –

答えて

2

短いソリューションなかっ:

<body onclick="myFunction(); this.onclick=null;"> 

それを確認してください:

<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>

+0

シンプルで効率的です。 IEのような古いブラウザでも動作しますか? – F3L1X79

2

それを行うにはいくつかの方法があります。

1.イベントリスナーをスクリプト内の本文に追加し、クリックすると削除されます。

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> 
2

以下は、明示的にグローバルオブジェクトwindowに関数をアタッチし、それが機能が

function(){ 
    var firstTime = true; 
    window.myFunction = function() { 
     if (firstTime){ 
      firstTime = false; 
      window.open("http://www.w3schools.com"); 
     } 
    } 
}() 
発射される最初の時間だかどうかを確認し、ブール変数を保持するクロージャを作成し、グローバルネームスペースを埋める避けるために IIFEを使用しています
関連する問題