2009-08-18 6 views
1

Ich verwende ein automatisches Vervollständigungs-Widget von YUI, um die Live-Suche wie in den Beispielen zu implementieren. Es funktioniert jedoch einwandfrei, wenn Suchtext eingegeben wird, funktioniert jedoch nicht, wenn der Text in das Feld eingefügt wird. Was wäre der richtige Weg, um eine automatische Vervollständigung von Paste zu initiieren? Habe dazu in der Dokumentation nichts gefunden ...YUI Autocomplete: Suche nach dem Einfügen?

EDIT: Einfügen ist nicht Strg-V, es ist normalerweise "Einfügen" aus dem Kontextmenü. YUI reagiert auf einen Tastendruck, aber wenn nichts eingefügt wird mit der Maus.

Antwort

0

Vielleicht könnten Sie bei einem Schlüsselereignis feststellen, ob sie v gedrückt haben, während Sie Strg gedrückt haben. Wenn ja, dann sendQuery ('query =' + textInput.value);

0

bearbeiten

Hier ist eine Kompatibilitätstabelle zeigt, welche Browser können Sie auf die Paste Ereignisse abonnieren.

http://www.quirksmode.org/dom/events/cutcopypaste.html

Hier seine Testseite, wo man sehen kann, wie auf die Ereignisse abonnieren.

http://www.quirksmode.org/dom/events/tests/cutcopypaste.html

ich denke, Sie & zu diesem mit YUI abonnieren könnten dann nur noch Ihren Rückruf dies:

function() { 
    autoCompleteObject.sendQuery(autoCompleteElement.value); 
} 

Achten Sie auf Browser-Inkompatibilitäten aus, sieht aus wie einige eine seltsame Umsetzung der Ereignisse haben .

3

Wir haben YUI die automatische Vervollständigung Widget erweitert und Griff aus dem Kontextmenü auf diese Weise einfügen:

YAHOO.util.Event.on(input, 'paste', function(e, autocomplete) { 
    // We're interested in the value of the input field after text is pasted into 
    // it instead of the pasted text because the autocomplete proposals are based 
    // upon the field's whole value. The paste event happens before the input 
    // field has been updated so we need to wait until after this event has been 
    // handled to check the value of the input field. 
    window.setTimeout(function() { 
     if (autocomplete._sInitInputValue !== autocomplete.getInputEl().value) { 
      autocomplete.sendQuery(autocomplete.getInputEl().value); 
     } 
    }, 1); 
}, this); 

Wo this den Autocomplete-Widget ist.

+0

Sie könnten auch ['YAHOO.lang.later'] (http://developer.yahoo.com/yui/docs/YAHOO.lang.html) anstelle von' window.setTimeout' verwenden. –