jQuery(this).val () - nicht wieder den Wert der ausgewählten option
Habe ich das folgende Skript am Ende meiner Seite:
<script type="text/javascript">
jQuery.noConflict();
jQuery(function() {
jQuery('#optElem').change(function(){
jQuery.post('http://example.com', { 'id1': 1, id2 : jQuery(this).val() },
function(data){
jQuery('#abc').html(data.payload);
jQuery('#abc').effect("highlight", {}, 3000);
}, "json");
});
});
</script>
Habe ich eine option im select-Feld mit der id 'optElem'. Der obige code soll ausgelöst werden, die auf das change-Ereignis, und auch ich möchten, übergeben Sie den Wert der ausgewählten option aus, um den callback-handler.
Das change-Ereignis wird korrekt ausgelöst und der gefangen von jQuery, aber ich bin immer ein leerer Wert für id2 (dies soll den Wert des ausgewählten Elements).
Ich bin mit JQuery(this).val() - aber das ist erstaunlich, ist die Rückgabe ein leerer Wert - wer weiß warum?
Die option select-Feld in HTML sieht dies mag:
<div>
<div>
<span id="yearElem">Year: </span><span id="optElem">
<select>
<option value="2010">2010</option>
<option value="2009">2009</option>
</select>
</span>
</div>
</div>
InformationsquelleAutor Stick it to THE MAN | 2010-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil
optElem
ist ein<span>
, nicht ein<select>
. Sie befestigen das change-Ereignis der Spannweite, und als ein Ergebnis,this
bezieht sich auf den span, wenn Sie innerhalb der Funktion beigefügt, zu ändern.Seit
this
ist die Spanne, ist es nicht Wert zugeordnet.Ihre beste Wette ist, zu geben, die
<select>
eine id, und befestigen Sie die ändern-Funktion, um es statt. Es macht viel mehr Sinn, um das change-Ereignis zugeordnet werden, dieselect
eher als einespan
.InformationsquelleAutor zombat
Den
val()
funktioniert nur auf HTML - Eingang Elemente (input
,select
,textarea
,button
). Müssen Sie bewegen dieid="optElem"
zu den<select>
element und es wird funktionieren.InformationsquelleAutor BalusC
Versuchen zu ändern, Zeile 4:
Dieser Sie auf das select-element innerhalb des #optElement.
(siehe auch die Antwort von BalusC, müssen Sie arbeiten auf einem select-element, nicht eine Spanne)
InformationsquelleAutor Emil Vikström
Ja! Sie müssen den Fokus auf die "Select" - element
indem wir dies tun!
InformationsquelleAutor Joberror
Ok, das ist ein Fehler, die viele von uns gemacht haben. @BalusC hat erklärt, jQuery
val()
funktioniert nur mit input-Elemente(input, select, textarea, button). Weil Elemente, wie div, span usw.. nichtvalue
Attribute, so scheint es jQuery hat sich entschieden, keine Unterstützung für diese Funktion mit den anderen. Nun nehmen wir an, wir haben das ul mit einigen li ' s:Was wir also brauchen, ist der Wert der
value
Attribut. Wie bereits gesagt:val()
wird nicht funktionieren, weil der offensichtliche Grund. Aber warum tun wir immer noch 0 im zweiten Fall. Sollte nichtattr('attributename')
Gegenzug den aktuellen Wert des angegebenen Attributs? Haha, das problem ist, es scheint, jquery verwechselt wird, wenn der name des Attributs istvalue
, das ist, warum es gibt 0 zurück. Wenn wir ändern die oben genannten html so:und fragte nach dem Wert von
value1
Attribut, dann würde man den tatsächlichen Wert.Schließlich, hier ist ein weiteres setup:
Nun sehen, was passiert:
Den Unterschied zwischen der letzten und der vorherigen 2-html ist, dass der Letzte Wert der
value
Attribut ist ein numerischer Wert, während in den vor lieben es ist ein alphanumerischer Wert. Für einige Grund, jQuery ist in Ordnung, wenn eine benutzerdefiniertevalue
Attribut hat einen numerischen Wert und Verhalten sich, als ob Sie beschäftigt sich mit einem input-element. Ich fühlte mich ein bisschen faul, um herauszufinden, den Grund hinter ihm. Also, wenn Sie neugierig sind, erkunden Sie die Welt der jquery-source-code. Haben ein nettes scripting.InformationsquelleAutor Mikayil Abdullayev