2016-08-05 40 views
1

Hallo, ich bin neu in Javascript. Hier ist mein Code. was ich tun möchte, ist, wenn jemand irgendwo auf der Seite klickt. Ein neues Fenster wird geöffnet, aber ich möchte, dass dies nur einmal passiert. Wenn also jemand erneut auf body klickt, sollte die Funktion nicht ausgeführt werden. Irgendwelche Ratschläge? bitte keine jqueryWie onclick Ereignis nur einmal zu arbeiten

<!DOCTYPE html> 
<html> 

<body onclick="myFunction()> 

<script> 

    function myFunction() { 

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

    } 

    </script> 

</body> 

</html> 
+0

Versuchen Sie, eine globale Javascript-Variable zu haben. Lassen Sie diesen Wert zunächst falsch sein. Überprüfen Sie vor dem Öffnen des Fensters den Wert dieser Variablen. Öffnen Sie das Fenster nur, wenn der Wert dieser Variablen falsch ist. Sobald Sie das Fenster geöffnet haben, setzen Sie es auf True. –

+0

Verwenden Sie eine globale Variable – shadowfox

+0

1: globale boolesche Variable, 2: Entfernen onclick Ereignis beim Ausführen von myFunction, 3: ... kann nicht an eine dritte Option denken –

Antwort

2

Eine kurze Lösung:

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

bestellen:

<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

Einfach und effizient. Funktioniert es auch auf alten Browsern wie IE? – F3L1X79

2

Es gibt mehrere Möglichkeiten, es zu tun.

1. Fügen Sie den Ereignis-Listener zu body im Skript hinzu und entfernen Sie ihn nach dem Klicken.

2.Haben Sie ein Flag, um zu überprüfen, ob die Funktion bereits aufgerufen wurde.

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

Die unten verwendet einen IIFE einen Verschluss hält die Boolesche Variable zu erstellen und vermeiden globalen Namensraum bevölkern, bringen Sie explizit eine Funktion zum globalen Objekt window und prüfen, ob es das erste Mal ist die Funktion

function(){ 
    var firstTime = true; 
    window.myFunction = function() { 
     if (firstTime){ 
      firstTime = false; 
      window.open("http://www.w3schools.com"); 
     } 
    } 
}() 
abgefeuert wird