2011-01-13 14 views
2

Ich habe ein Textfeld Eingabefeld und ein Kontrollkästchen. Wenn ich den Text ändere und dann außerhalb des Eingabefeldes klicke (oder Enter oder Tab drücke), wird das Änderungsereignis ausgelöst. Aber wenn ich etwas Text eingebe und dann mit der Maus direkt auf das Kästchen klicke, scheint nur das Kontrollkästchen change event ausgelöst zu werden.Javascript Texteingabe Änderung Ereignis nicht feuern

Ich habe den folgenden Code:

<input type="text" name="text" class="update"> 
<input type="checkbox" name="check" class="update"> 

und diese jQuery:

$('.update').change(function(){ 
    console.log($(this)); 
}); 

Ist das ein bekanntes Problem, und wie kann ich sicherstellen, dass alle Änderungsereignisse ausgelöst werden/geworfen/gefangen in diese Einrichtung?

+0

Ist dieser Code in einem $ (Dokument) .ready (function()); Funktion? Sie könnten versuchen, eine Warnung() in die Funktion zu setzen, um zu sehen, ob Sie die Funktion treffen. – codersarepeople

+0

Seltsam. Etwas anderes muss weitergehen, da mein Test funktioniert, wenn ich von einer geänderten Texteingabe auf die Checkbox klicke http://jsfiddle.net/tbeseda/UCtyb/ – tbeseda

+0

Bist du sicher? Ich kopierte die HTML/JS und konnte sehen, wie die Ereignisse ausgelöst wurden, wenn ich etwas in ein Textfeld eingab und dann auf das Kontrollkästchen klickte. – Chandu

Antwort

1

Ich bin mir nicht sicher, ob ich es bekomme. Aber für mich, wenn ich versuche, ein Textfeld einzugeben und dann mit der Maus auf das Kontrollkästchen zu klicken, werden beide Ereignisse ausgelöst. Aber Sie müssen bedenken, dass das Ereignis "change" für die Texteingabe bedeutet, dass dieser Eingang den Fokus verlieren muss, solange das Feld fokussiert ist, wird kein Änderungsereignis ausgelöst. Das könnte irgendwie dein Fall sein. Checkboxen/Radioboxen funktionieren anders. Keine Notwendigkeit, den Fokus zu verlieren.

Prost.

P.S. Mein Testfall: http://dl.dropbox.com/u/196245/index16.html

1

Das Änderungsereignis wird für beide ausgelöst, weil Sie die Aktualisierungsklasse überwachen.

1

Die Veranstaltung Änderung wird nicht ausgelöst, wenn der Eingabefokus auf andere Steuerelemente

geschaltet
0

Benutzer Änderungen zu schießen, verwenden Sie das Eingabeereignis:

$('input').on('input',function(){...}) 

Um Feuer Code Änderungen, verwenden Sie das Ereignis DOMSubtreeModified:

$('input').bind('DOMSubtreeModified',function(){...}) 

Wenn Sie beiden Benutzer und Code-Änderungen feuern wollen:

$('input').bind('input DOMSubtreeModified',function(){...}) 

Das DOMSubtreeModified Ereignis markiert als veraltet und zum Teil recht CPU zeitaufwendig, aber es kann auch sehr effizient, wenn sorgfältig verwendet ...

Verwandte Themen