Hallo
bei einem Button Klick sollen zwei Funktionen aufgerufen werden (mit return)
Ich habe es so versucht:
onclick="return checkbutton(); return notemsgbefore();"
Wenn die erste Funktion jedoch ok ist bzw. kein "false" zurückbringt, wird die zweite "notemshbefore()" erst gar nicht aufgerufen.
Die zweite Funktion wird hier niemals aufgerufen. Der String, den du dem Handlerattribut als Wert zuweist wird automatisch zu einer anonymen Funktion geparst, das heißt, was du oben geschrieben hast liest sich in Wirklichkeit etwa so:
button.onclick = function (event) {
return checkbutton( );
return notemsgbefore( );
};
Wird der Eventhandler durch einen Klick auf den Button ausgelöst wird einfach nur checkbutton
aufgerufen und deren Wert zurückgegeben. Die zweite return-Anweisung wird nie erreicht.
Jetzt habe ich bei stackoverflow etwas gelesen das man dies mit einem logischen UND verbinden kann, also:
onclick="return checkbutton() && notemsgbefore();"
Das klappt bei mir aber nicht.
Daraus wird wie oben gesehen folgendes:
button.onclick = function (event) {
return checkbutton( ) && notemsgbefore( );
};
Hier wird zunächst checkbutton
aufgerufen und wenn deren Rückgabewert ein falsy value ist, dann wird dieser Wert zurückgegeben. Die Funktion notemsgbefore
wird in diesem Fall nicht aufgerufen.
Ist der Rückgabewert von checkbutton
hingegen kein falsy value, sprich, ergibt die Auswertung von checkbutton()
ein positives Ergebnis, dann wird notemsgbefore
aufgerufen und deren Wert zurückgegeben.
Wenn du möchtest, dass die zweite Funktion, also notemsgbefore
nur aufgerufen wird, wenn checkbutton
ein bestimmtes Ergebnis zurückgibt, dann kannst du das natürlich mit den entsprechenden Operatoren oder auch einfach über eine bedingte Anweisung implementieren.
Je nach dem was du vorhast, könnte das so aussehen, unter der Voraussetzung, dass du deinem Button eine ID gegeben hast, über die er referenziert werden kann:
document.getElementById('name').addEventListener('click', function ( ) {
// wenn checkbutton ein positives Ergebnis zurückgibt, rufe notemsgbefore auf
checkbutton( ) && notemsgbefore( );
});
// oder
document.getElementById('name').addEventListener('click', function ( ) {
// wenn checkbutton ein negatives Ergebnis zurückgibt, rufe notemsgbefore auf
checkbutton( ) || notemsgbefore( );
});
Eventhandler sollten nicht im HTML sondern mittels der Methode addEventListener registriert werden.
Im Gegensatz zu deinem Code enthält die als Event Listener registrierte anonyme Funktion hier im Beispiel keine return-Anweisung, eine solche wäre nämlich unabhängig von der Art der Notation ziemlich nutzlos, es sei denn, du wolltest eine Defaultaktion unterbinden. Aber dies sollte wenn dann ohnehin mittels event.preventDefault() umgesetzt werden…
Gruß,
Orlok
„Das Wesentliche einer Kerze ist nicht das Wachs, das seine Spuren hinterlässt, sondern das Licht.“ Antoine de Saint-Exupéry