Ich hatte gedacht, diese beiden wären gleich, aber sie scheinen es nicht zu sein. Ich habe im Allgemeinen verwendet$obj.attr("value")
mit Formularfeldern gearbeitet, aber auf der Seite, die ich gerade erst baue, $obj.attr("value")
wird der in mein Feld eingegebene Text nicht zurückgegeben. Tut es $obj.val()
jedoch.
Beides habe ich auf einer anderen Seite erstellt $obj.attr("value")
und $obj.val()
den im Formularfeld eingegebenen Text zurückgegeben.
Was könnte dafür verantwortlich sein $obj.attr("value")
, dass in einem Fall wie erwartet gearbeitet wird, in einem anderen jedoch nicht?
Was ist der richtige Weg, um den Wert eines Formularfelds mit jQuery festzulegen und abzurufen?
val()
nur der Wert von bestimmten Arten von Tags abgerufen wird. Sie können beispielsweise den Wert einer Eingabe mitval()
abrufen. Wenn Sie dasvalue
Attribut jedoch einema
Tag oder einemdiv
Tag hinzufügen , funktioniert dies nicht. Sie müssen verwenden.attr("value")
Antworten:
Es gibt einen großen Unterschied zwischen den Eigenschaften eines Objekts eines Objekts und den Attributen eines Objekts
In diesen Fragen (und ihren Antworten) finden Sie einige der Unterschiede: .prop () vs .attr ()
Das Wesentliche ist,
.attr(...)
dass der Objektwert erst zu Beginn (wenn das HTML erstellt wird) abgerufen wird .val()
erhält den Eigenschaftswert des Objekts, der sich um ein Vielfaches ändern kann.quelle
properties
vs attr () bekommt / setztattributes
, füge nur diesen Kommentar hinzu, weil ich ihn nicht bekommen habe, als ich deine Antwort zum ersten Mal gelesen habe. Vielleicht könnten Sie diese Informationen hinzufügen, um zu verdeutlichen? tolle Antwort übrigens.Seit jQuery 1.6
attr()
wird der ursprüngliche Wert eines Attributs zurückgegeben (der im Markup selbst). Sie müssen prop () verwenden , um den aktuellen Wert zu erhalten:var currentValue = $obj.prop("value");
Die Verwendung von val () ist jedoch nicht immer gleich. Beispielsweise ist der Wert von
<select>
Elementen tatsächlich der Wert der ausgewählten Option.val()
berücksichtigt das,prop()
tut es aber nicht. Aus diesem Grundval()
ist bevorzugt.quelle
<select>
Elementen. Das hat mich dazu gebracht.PS: Dies ist keine Antwort, sondern nur eine Ergänzung zu den obigen Antworten.
Nur als zukünftige Referenz habe ich ein gutes Beispiel beigefügt, das uns helfen könnte, unsere Zweifel auszuräumen:
Versuche Folgendes. In diesem Beispiel werde ich eine Dateiauswahl erstellen, mit der eine Datei ausgewählt werden kann, und dann werde ich versuchen, den Namen der von mir ausgewählten Datei abzurufen: Der HTML-Code ist unten :
<html> <body> <form action="#" method="post"> <input id ="myfile" type="file"/> </form> <script type="text/javascript" src="jquery.js"> </script> <script type="text/javascript" src="code.js"> </script> </body> </html>
jQuery-Code mit attr ('Wert'):
$('#myfile').change(function(){ alert($(this).attr('value')); $('#mybutton').removeAttr('disabled'); });
jQuery-Code mit val ():
$('#myfile').change(function(){ alert($(this).val()); $('#mybutton').removeAttr('disabled'); });
Ausgabe:
Die Ausgabe von jQuery-Code mit attr ('value') ist 'undefined'. Die Ausgabe von jQuery-Code mit val () entspricht dem von Ihnen ausgewählten Dateinamen.
Erläuterung : Jetzt können Sie leicht verstehen, was die Top-Antworten vermitteln wollten. Die Ausgabe von jQuery-Code mit attr ('Wert') ist 'undefiniert', da anfangs keine Datei ausgewählt wurde und der Wert undefiniert ist. Es ist besser, val () zu verwenden, da es den aktuellen Wert erhält.
Um zu sehen, warum der undefinierte Wert zurückgegeben wird, versuchen Sie diesen Code in Ihrem HTML-Code und Sie werden sehen, dass jetzt der attr. ('Wert') immer 'test' zurückgibt, da der Wert 'test' ist und zuvor undefiniert war.
<input id ="myfile" type="file" value='test'/>
Ich hoffe es war nützlich für dich.
quelle
Die richtige Methode zum Festlegen und Abrufen des Werts eines Formularfelds ist die Verwendung der
.val()
Methode.$('#field').val('test'); // Set var value = $('#field').val(); // Get
Mit jQuery 1.6 gibt es eine neue Methode namens
.prop()
.quelle
Lernen wir aus einem Beispiel. Es soll ein Texteingabefeld mit dem Standardwert = "Geben Sie Ihren Namen ein" vorhanden sein.
var inp = $("input").attr("value"); var inp = $("input").val();
Beide geben "Geben Sie Ihren Namen ein" zurück.
Angenommen, Sie ändern den Standardtext in Ihrem Browser in "Jose".
var inp = $("input").attr("value");
gibt weiterhin den Standardtext aus, dh "Geben Sie Ihren Namen ein".
var inp = $("input").val();
Gibt
.val()
aber "Jose" zurück, dh den aktuellen Wert.Ich hoffe es hilft.
quelle
Um das
value
Eingabefeld zu erhalten, sollten Sie immer$element.val()
weil-jQuery
Handles verwenden, um den richtigen Wert basierend auf dem Browser des Elementtyps abzurufen.quelle
jQuery('.changer').change(function () { var addressdata = jQuery('option:selected', this).attr('address'); jQuery("#showadd").text(addressdata); });
quelle
jQuery(".morepost").live("click", function() { var loadID = jQuery(this).attr('id'); //get the id alert(loadID); });
quelle
Dieses Beispiel kann nützlich sein:
<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> </head> <body> <input id="test" type="text" /> <button onclick="testF()" >click</button> <script> function testF(){ alert($('#test').attr('value')); alert( $('#test').prop('value')); alert($('#test').val()); } </script> </body> </html>
Im obigen Beispiel funktioniert alles perfekt. Wenn Sie jedoch die Version von jquery im Skript-Tag auf 1.9.1 oder neuer ändern, wird in der ersten Warnung "undefiniert" angezeigt. attr ('value') funktioniert nicht mit jquery Version 1.9.1 oder neuer.
quelle
Beispiel mehr ... attr () ist verschieden, val () ist nur eins! Prop is boolean sind anders.
//EXAMPLE 1 - RESULT $('div').append($('input.idone').attr('value')).append('<br>'); $('div').append($('input[name=nametwo]').attr('family')).append('<br>'); $('div').append($('input#idtwo').attr('name')).append('<br>'); $('div').append($('input[name=nameone]').attr('value')); $('div').append('<hr>'); //EXAMPLE 2 $('div').append($('input.idone').val()).append('<br>'); $('div').append('<hr>'); //EXAMPLE 3 - MODIFY VAL $('div').append($('input.idone').val('idonenew')).append('<br>'); $('input.idone').attr('type','initial'); $('div').append('<hr>'); //EXAMPLE 3 - MODIFY VALUE $('div').append($('input[name=nametwo]').attr('value', 'new-jquery-pro')).append('<br>'); $('input#idtwo').attr('type','initial');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <input type="hidden" class="idone" name="nameone" value="one-test" family="family-number-one"> <input type="hidden" id="idtwo" name="nametwo" value="two-test" family="family-number-two"> <br> <div></div>
quelle
jquery - Ruft den Wert in ein Eingabetextfeld ab
<script type="text/javascript"> jQuery(document).ready(function(){ var classValues = jQuery(".cart tr").find("td.product-name").text(); classValues = classValues.replace(/[_\W]+/g, " ") jQuery('input[name=your-p-name]').val(classValues); //alert(classValues); }); </script>
quelle
Wenn Sie für Eigenschaft und Attribut den gleichen Wert erhalten, dieser jedoch im HTML-Code immer noch unterschiedlich ist, versuchen Sie Folgendes, um den HTML-Wert zu erhalten:
$('#inputID').context.defaultValue;
quelle
In
attr('value')
Sie Sie suchen den Wert eines Attributs namens speziell sagenvaule
. Es ist vorzuziehen, dies zu verwenden,val()
da dies die sofort einsatzbereite Funktion von jQuery zum Extrahieren des Werts aus Formularelementen ist.quelle
Ich habe es immer benutzt
.val()
und um ehrlich zu sein, wusste ich nicht einmal, dass man den Wert damit nutzen kann.attr("value")
. Ich setze den Wert eines Formularfeldes auch mit .val ().$('#myfield').val('New Value');
quelle