630 Stimmen

Wie kann ich am besten verfolgen, ob sich etwas ändert, wenn ich input type="text" eingebe?

Meiner Erfahrung nach, input type="text" onchange tritt in der Regel erst nach Ihrem Weggang ein ( blur ) die Kontrolle.

Gibt es eine Möglichkeit, den Browser zu zwingen, die onchange jedes Mal textfield Inhaltliche Änderungen? Wenn nicht, was ist der eleganteste Weg, dies "manuell" zu verfolgen?

Verwendung von onkey* Ereignisse ist nicht zuverlässig, da Sie mit der rechten Maustaste auf das Feld klicken und Einfügen wählen können, wodurch das Feld ohne Tastatureingabe geändert wird.

Es setTimeout der einzige Weg Hässlich :-)

4voto

RolandDeschain Punkte 231

Wenn Sie NUR den Internet Explorer verwenden, können Sie dies tun:

<input type="text" id="myID" onpropertychange="TextChange(this)" />

<script type="text/javascript">
    function TextChange(tBox) {
        if(event.propertyName=='value') {
            //your code here
        }
    }
</script>

Ich hoffe, das hilft.

4voto

z666zz666z Punkte 1185

Es gibt eine ziemlich naheliegende Lösung (nicht alle Einfügeverfahren), aber die meisten davon:

Es funktioniert sowohl für Eingaben als auch für Textareas:

<input type="text" ... >
<textarea ... >...</textarea>

Machen Sie es so:

<input type="text" ... onkeyup="JavaScript: ControlChanges()" onmouseup="JavaScript: ControlChanges()" >
<textarea ... onkeyup="JavaScript: ControlChanges()" onmouseup="JavaScript: ControlChanges()" >...</textarea>

Wie ich schon sagte, lösen nicht alle Möglichkeiten zum Einfügen ein Ereignis auf allen Browsern aus... im schlimmsten Fall lösen einige überhaupt kein Ereignis aus, aber Timer sind schrecklich, um für solche verwendet zu werden.

Aber die meisten Einfügevorgänge werden mit der Tastatur und/oder der Maus durchgeführt, so dass normalerweise ein onkeyup oder onmouseup nach dem Einfügen ausgelöst wird, auch onkeyup wird beim Tippen auf der Tastatur ausgelöst.

Achten Sie darauf, dass Ihr Prüfcode nicht zu lange dauert... sonst bekommt der Benutzer einen schlechten Eindruck.

Ja, der Trick ist, auf die Taste und auf die Maus zu feuern... aber Vorsicht, beides kann abgefeuert werden, also beachtet das!!!

4voto

Sam Punkte 51

"Eingabe" hat bei mir funktioniert.

var searchBar  = document.getElementById("searchBar");
searchBar.addEventListener("input", PredictSearch, false);

4voto

Venkat Punkte 157

Probieren Sie dieses Beispiel aus und reduzieren Sie vorher die Blinkrate des Cursors auf Null, um jede Spur zu verfolgen.

<body>
//try onkeydown,onkeyup,onkeypress
<input type="text" onkeypress="myFunction(this.value)">
<span> </span>
<script>
function myFunction(val) {
//alert(val);
var mySpan = document.getElementsByTagName("span")[0].innerHTML;
mySpan += val+"<br>";
document.getElementsByTagName("span")[0].innerHTML = mySpan;
}
</script>

</body>

onblur : Ereignis wird beim Beenden erzeugt

onchange : Ereignis wird beim Beenden erzeugt, wenn eine Änderung im Eingabetext vorgenommen wurde

onkeydown: Ereignis wird bei jedem Tastendruck erzeugt (auch bei langem Halten einer Taste)

onkeyup : Ereignis wird bei jedem Loslassen einer Taste erzeugt

onkeypress: wie onkeydown (oder onkeyup), reagiert aber nicht auf ctrl,backsace,alt andere

4voto

a20 Punkte 4691

2018 hier, das ist mein Job:

$(inputs).on('change keydown paste input propertychange click keyup blur',handler);

Ich wäre Ihnen dankbar, wenn Sie mich auf Fehler in diesem Ansatz hinweisen könnten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X