2016-05-08 10 views
0

Wie kann ich den Wert der Variablen "clicked" aktualisieren, nachdem die Funktion "clickListener" ausgeführt wurde? Es ist definitiv ein Problem mit dem Umfang der "angeklickt" Variablen.Variablenwert aus addEventListener abrufen

var clicked = 'no'; 
focus(); 
listener = addEventListener('blur', clickListener); 
function clickListener(){ 
    if(document.activeElement == document.getElementById('someIframe')){ 
     clicked = 'yes'; 
     console.log(clicked); 
    } 
}; 

Jedes Mal, wenn ich diese laufe, Konsolenprotokolle „ja“, aber das „outter“ geklickt ist immer noch nicht, ob ich die Variablen überprüft, nach dem Klick passiert.


Hier ist ein JSFiddle meiner Frage: https://jsfiddle.net/6c3nbpk5/4/

  1. Konsole öffnen
  2. Hinweis Zustand der DIV "message" ('nicht angeklickt')
  3. Klicken Sie in der iframe, wo es sagt "klick mich"
  4. Beachten Sie, dass die Konsole zeigt 'Div Nachricht: Clicked'
  5. Beachten Sie Variable in Spaß ction sollte aktualisiert werden, um durch die Konsole bestätigt zu werden
  6. Hinweis Div "Nachricht" weiterhin angezeigt nicht angeklickt.

Ich brauche divMessage zum Aktualisieren auf geklickt. All dies befindet sich jedoch in einer Funktion, die mehrere Iframes verfolgt, sodass ich die Variable nicht an das Fenster anhängen kann.

+0

Ihr "Klick" -Listener ist nicht an das Klickereignis gebunden. Aber wie überprüft man die Variable nach dem Event? – nnnnnn

+0

Versuchen Sie, alle "angeklickt" durch "window.clicked" zu ersetzen und zu sehen, was passiert –

+0

Es ist, weil ich den Klick eines iframe überprüfe.Man kann einem Iframe keinen Klick-Listener zuweisen, stattdessen suche ich nach dem letzten Element im Fokus, bevor die neue Registerkarte nach dem Klicken auf den Iframe geöffnet wird. –

Antwort

1

JavaScript ist Funktionsbereich, wenn es im aktuellen Funktionsumfang keine Definition findet, wird der äußere Bereich überprüft und so weiter.

Sie ändern nämlich den Wert der äußeren clicked in Ihrer inneren Funktion.

Aber es mag ein bisschen schwierig erscheinen - siehe hier, um ein Gefühl für das Timing zu bekommen - https://jsfiddle.net/6c3nbpk5/1/.

var clicked = 'no'; 
window.addEventListener('click', clickListener); 
function clickListener(){ 
     clicked = 'yes'; 
     window.alert(clicked); 
}; 
window.alert(clicked); 
+0

Danke. Bitte sehen Sie sich die Frage an, um mein Problem zu aktualisieren. –

+0

Sie haben ein ** blur ** -Ereignis am ** Fenster **, was Sie möchten, ist ein ** click ** -Ereignis auf Ihrem ** iframe **. Bitte markieren Sie als Antwort oder lassen Sie mich wissen, was Sie nicht verstehen. –

+0

Sie können keine Klickereignisse in domänenübergreifenden Iframes registrieren. Der iframe in meiner Datei ist keine Crossdomain für die Demo, aber auf meinem Projekt ist es Cross-Domain. Daher funktioniert ein Klick-Listener nicht. Meine Frage hat jedoch nichts mit dem Ereignis-Listener zu tun. Es hat damit zu tun, den Wert von "angeklickt" außerhalb der Funktion zu erhalten. Bitte sehen Sie sich meine jsfiddle an https://jsfiddle.net/6c3nbpk5/4/ Ich möchte die Textzeichenfolge "nicht angeklickt" in "angeklickt" ändern. –

0

addEventListener ist eine Funktion, die von einem Ereignisziel aufgerufen werden muss. Sie sollten es nicht gleich setzen.

Zum Beispiel: Angenommen, Sie einen div haben eine Sie wollen eine Variable speichern, wenn sie feststellt geklickt wurde:

var div = document.querySelector('div'); // grabs the first div 
var clicked = false; 

div.addEventListener('click', function() { 
    clicked = true; 
}); 

Hinweis: Was Ihr Code derzeit tut, ist ein Ereignis-Listener Registrierung auf window da Sie kein Ziel angegeben haben, nimmt Javascript an, dass Sie window bedeuten.

Als solches wird jedes Blur-Ereignis auf der Seite Ihren Rückruf auslösen. Wenn dies das beabsichtigte Verhalten ist, posten Sie bitte Ihren vollständigen HTML-Code mit einer spezifischeren Erklärung dessen, was Sie erreichen möchten, und wir können helfen, dieses Problem zu beheben.

Es scheint mir, dass Sie eher ein Klickereignis als ein Unschärfeereignis verwenden sollten, da es nur um den heißen Brei herumgeht, um das gleiche Ergebnis zu erzielen.

+0

Bitte lesen Sie die aktualisierte Frage für jsfiddle. Vielen Dank! –