2013-02-23 11 views
7

Ich habe diese einfach Code:Javascript: onchange Ereignis wird nicht ausgelöst, wenn der Wert in onkeyup Ereignisse geändert wird

<body> 
     <input type="text" onkeyup="this.value = (new Date()).getSeconds()" onchange="alert(1)" /> 
    </body> 

ich dont't wissen, warum der Textbox Wert geändert hat, wenn ich die Taste drücken, aber das Ereignis onchange feuert nicht. Wie kann ich onchange-Ereignis auslösen?

+0

Verwenden Sie oninput für alles außer ie –

+0

Verwenden: 'onkeyup =" this.value = (neues Datum()). GetSeconds(); this.onchange(); "' – Ian

+0

@ Barmar, Ian: Ich brauche nicht Das onchange-Ereignis wird direkt nach dem Ändern des Werts der Textbox in der onkeyup-Funktion ausgeführt. Ich brauche die Warnung (1), wenn ich auf die Seite klicke, um das Textfeld zu verlassen. – hieund

Antwort

1

Die onchange wird ausgelöst, wenn Sie den Fokus davon lassen (wenn Sie Änderungen vorgenommen haben). Dieses Verhalten tritt nur bei Eingabearten text und textarea auf, da JavaScript nicht weiß, wenn Sie mit der Eingabe fertig sind.

Ich weiß nicht, warum es ein Kontrollkästchen im Code gibt, aber was auch immer. Mit freundlichen Grüßen, ich bin nicht in der Lage, Ihnen zu sagen, warum, aber das Problem ist die dynamische Wertänderung an der Eingabe (eine Vermutung wäre, dass die Änderung nicht vom Benutzer durchgeführt wird, aber ich weiß wirklich nicht), wenn Sie entfernen den Code in der onkeyup es funktioniert. Was auch immer, wenn Sie etwas Code ausführen möchten, wenn die Eingabe den Fokus verliert, können Sie stattdessen onblur verwenden, ist in diesem Fall genauer.

+0

Erklärung zu den Downvotes? Ich hätte gerne eine Korrektur damit, wenn ich nicht falsch liege. – martriay

+0

"Warum würdest du das tun?" : Da ich den Eingabewert beim Keyup bekommen muss, wenn es nicht gültig ist, werde ich es korrigieren und den gültigen Wert zurückgeben. Nachdem ich den Eingabewert geändert habe, werde ich etwas anderes im Onchange-Event tun. Aber in diesem SIMPLE-Code wird die Onchange nicht ausgelöst, auch wenn ich auf die Seite klicke, um den Fokus auf das Textfeld zu legen. (Sie können es in den Notizblock kopieren, speichern Sie als HTML, um zu überprüfen) – hieund

+0

Ich weiß nicht, warum es eine Checkbox im Code gibt, aber was auch immer. Mit freundlichen Grüßen, ich bin nicht in der Lage, Ihnen zu sagen, warum, aber das Problem ist die dynamische Wertänderung an der Eingabe (eine Vermutung wäre, dass die Änderung nicht vom Benutzer durchgeführt wird, aber ich weiß wirklich nicht), wenn Sie entfernen den Code innerhalb der Onkeyup, es funktioniert. Was auch immer, wenn Sie etwas Code ausführen möchten, wenn die Eingabe den Fokus verliert, können Sie stattdessen "onblur" verwenden, ist in diesem Fall genauer. – martriay