/ / onclick-Ereignis wird nicht ausgelöst, wenn onchange unmittelbar vor der Ausführung ausgelöst wurde - Javascript, onclick, onchange

onclick-Ereignis wird nicht ausgelöst, wenn onchange unmittelbar zuvor ausgelöst wurde - javascript, onclick, onchange

Ich habe hier ein lustiges Problem.

Ich habe ein Textfeld mit einem damit verknüpften onchange-Ereignis. Dann habe ich einen Knopf, der mit einem onclick Ereignis verbunden wird.

Der Text, der in das Textfeld gestellt wird, wird verarbeitet, wenn das Ereignis onchange für das Textfeld ausgelöst wird. Dies passiert normalerweise, wenn ich auf etwas außerhalb des Textbereichs klicke.

Was ich tat, war das folgende:

  1. Ich habe einen Text in das Textfeld eingegeben.
  2. Gleich nach der Eingabe klicke ich auf die Schaltfläche, um das Ereignis onclick auf die Schaltfläche auszulösen
  3. Nichts passiert, aber das onchange-Ereignis im Textbereich wurde ausgelöst, als ich auf die Schaltfläche geklickt habe, aber das onclick-Ereignis auf der Schaltfläche selbst wird nicht ausgelöst.

Warum? Ich habe erwartet, dass sowohl onchange als auch onclick ausgelöst werden. Gibt es irgendetwas, was ich tun muss, damit der Klick auf den Button nicht "verloren" geht? Mir wurde klar, dass ich zweimal klicken muss, da der erste Klick eine Änderung im Textbereich verursacht und DANN der zweite Klick einen Klick auf die Schaltfläche auslöst.

Der folgende Code zeigt ein Beispiel. Probieren Sie einfach den folgenden Code aus. Geben Sie einen Text ein und klicken Sie dann direkt auf diese Schaltfläche. Es erscheint nur das Popup "textarea".

<textarea onchange="processText();" name="mytext"></textarea>
<button onclick="processButton();">Hello</button>
<script language="Javascript">
function processText()
{
alert( "textarea");
}

function processButton()
{
alert( "button");
}
</script>

Antworten:

4 für die Antwort № 1

Sie müssen Ihre Annahmen überprüfen. In Ihrem Beispiel warnen() unterbricht den Programmablauf und unterbricht die Bearbeitung von onclick. Dieser Code (hier spielen) zeigt das bei Änderung stört nicht onclick standardmäßig:

<textarea onchange="processText();" name="mytext"></textarea>
<button onclick="processButton();">Hello</button>
<div id="clicked"></div>
<div id="changed"></div>
<script language="Javascript">
function processText()
{
document.getElementById("changed").innerHTML = "onchange fired";;
}

function processButton()
{
document.getElementById("clicked").innerHTML = "onclick fired";
}
</script>​

Ich hatte ein ähnliches Problem, aber den eigentlichen Grund dafür, dass die onclick Das Ereignis, das nicht behandelt wurde, bestand darin, dass das Element, auf das geklickt wurde, infolge des Bildlaufs nach unten verschoben wurde bei Änderung Handler. Beim Loslassen der Maustaste erhielt das Element kein mouseup Ereignis und der "Klick" wurde unterbrochen.


1 für die Antwort № 2

Behandeln Sie das Unschärfe-Ereignis im Textbereich und das Klicken auf die Schaltfläche


0 für die Antwort № 3

Versuchen Sie dies, um den Komponenten einen Ereignis-Listener hinzuzufügen

document.getElementsByTagName("textarea")[0].addEventListener("change", function(){
alert( "textarea");
});

document.getElementsByTagName("button")[0].addEventListener("click", function(){
alert( "button");
});

ob Ids definiert sind dann verwenden getElementById ().