2016-10-21 7 views
1

was ich tun möchte, ist so etwas wie wenn Benutzer fertig tippen meine App zeigt eine Nachricht des eingegebenen Wertes in diesem Eingang, ich werde eine Menge von Eingaben haben, so ist es keine Option tun durch Auswahl Eingabe-ID, also wie kann ich dieses Problem lösen? Was ich versuche ist die Auswahl $(this).value zu tun, aber ich bekomme nur „undefinied“, hier ist ein Beispiel-Code von dem, was ich versuche,Wie bekomme ich Eingabewert ohne ID

var timer = null; 
 
$(document).ready(function() { 
 
    $('input').keydown(function (event) { 
 
     clearTimeout(timer); 
 
     timer = setTimeout(validarType, 1000) 
 
    }); 
 

 

 
}); 
 
function validarType() { 
 
    var xd = $(this).value; 
 
    alert(xd); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input type="text"/>

+0

lassen Sie mich den Rest Ihres dom sehen, können Sie Eltern/Kind-Beziehung verwenden, um die Eingabe zu erhalten, wenn es ist mehr als 1 Eingabe auf der Seite. –

+0

Warum geben Sie den Wert nicht in Ihre Validator-Methode ein, diese ist dann wiederverwendbar. Verwenden Sie eine anonyme Funktion im Timeout, um Ihre Validator-Methode mit dem Wert aufzurufen. – ste2425

Antwort

4

Ihr Code zu tun, nicht funktioniert aus 2 Gründen

this ist nicht das gleiche this wie es war, als Ihr Handler aufgerufen wurde - weil Sie diese Funktion innerhalb einer Zeitüberschreitung aufrufen.

$(this) ist ein jQuery-Objekt - es gibt keine value Attribut

Korrekter Code:

var timer = null; 
$(document).ready(function() { 
    $('input').keydown(function (event) { 
     clearTimeout(timer); 
     timer = setTimeout(validarType.bind(this), 1000) //bind the existing context 
    }); 
}); 
function validarType() { 
    var xd = this.value; //this is now a regular DOM element - and has a value attribute 
    alert(xd); 
} 
+0

Vielen Dank mein Freund! –