2012-06-15 7 views
9

Ich möchte eine Funktion bei jeder Änderung eines Textfeldsteuerelements ausführen, sobald der Benutzer tippt. Das Ereignis .keyup() ist für die meisten Fälle in Ordnung.jQuery-Ereignis nach Auswahl eines vorgeschlagenen Elements in einem Textfeld?

Browser (wie Chrome oder Firefox) können jedoch Autovervollständigungseinträge für Textfeldsteuerelemente vorschlagen (wahrscheinlich, weil der @ Name oder die @id des Eingabesteuerelements bekannt ist).

Leider kann ich keine der folgenden Ereignisse ausgelöst haben, wenn ich auf einen vorgeschlagenen Eintrag klicke. (.keyup() ausgelöst wird, wenn mit der Tastatur ausgewählt)

$('input#email') 
    .click(function() { console.log('click'); }) 
    .keyup(function() { console.log('keyup'); }) 
    .keydown(function() { console.log('keydown'); }) 
    .change(function() { console.log('change'); }) 
    .focus(function() { console.log('focus'); }) 
    .blur(function() { console.log('blur'); }); 

So viel wie möglich, würde ich mit einer setInterval() periodischen Überprüfung vermeiden möge.

Gibt es eine Möglichkeit, dieses Ereignis "einen Vorschlag auswählen" zu erkennen?

Antwort

8

binden klicken:

$('input').bind('input propertychange', function() { 

    var input = this.value.trim(); 
    [...] 

}); 
+2

Großartig! Danke dafür (auch wenn ich jetzt ein bisschen weit von diesem Projekt entfernt bin). Ich stelle fest, dass es ausgelöst wird, wenn auf einen vorgeschlagenen Eintrag (wie gewünscht) geklickt wird, aber nicht, wenn es per Tastatur ausgewählt wird. Es kann nützlich sein, den Event-Handler auch mit _keyup_ zu registrieren, um diese Lücke zu füllen. – Myobis

5

Die kurze Antwort ist nein, es gibt kein Ereignis zum Erkennen einer Vorschlagsauswahl. Sie könnten versuchen, DOM-Mutationsbeobachter zu betrachten, aber ich bin unsicher, ob sich diese Änderungen auf die Attribute beziehen, und es gibt bisher wenig Unterstützung für diese API.

Also, wenn Sie wirklich mit diesem Fall umgehen müssen dann denke ich setInterval ist Ihre einzige Option.

Edit: 3 Jahre später können Sie propertychange mit jQuery wie in der neuen akzeptierten Antwort (die ich vermute, verwendet Mutationsbeobachter unter der Haube) verwenden.

+0

Meine Untersuchungen scheinen zu dieser Schlussfolgerung zu konvergieren. Danke für Ihre Eingabe. – Myobis

+0

Neben 'setInterval' denke ich, dass eine klarere Herangehensweise darin besteht, zu erkennen, wann ein Feld/Textareas den Fokus hat, seinen aktuellen Wert zu kopieren und ihn mit seinem Wert zu vergleichen, nachdem er den Fokus verloren hat. Ein Nachteil ist, dass Sie nur wissen, dass es geändert wird, sobald das Feld den Fokus verliert. Ein einfacher Weg, dies zu überwinden, besteht jedoch darin, einen "Change" -Listener neben dem eben beschriebenen zu implementieren. –

0

Das Änderungsereignis scheint funktioniert gut, aber sie erfordert weg propertychange Ereignis

2

alternative Lösung Deaktivieren der automatischen Vervollständigung und behandeln andere Ereignisse wie keyup, keydown etc

<input type="text" name="foo" autocomplete="off" /> 
Verwandte Themen