2010-02-24 12 views
6

w jQuery 1.3.2, następujące prace:Ustawianie select przez wytwórnię poprzez jQuery w 1,4

<select id="c"> 
    <option value="325">Red</option> 
    <option value="833">Purple</option> 
</select> 

$('#c').val('Red'); 

i zmienia select do opcji z czerwona jak jego etykiecie. W jQuery 1.4 to się nie udaje. Jak mogę uzyskać ten sam wynik w wersji 1.4? Czy był to błąd w wersji 1.3?

Odpowiedz

10

Trzeba by zrobić to w ten sposób:

$('option:contains("Red")', '#c')[0].selected = true 

EDIT

@Tomalak

Jeśli etykiety ARENT wzajemnie exclusivey wy mieliście konieczne jest przepisanie selektora:

$.fn.labselect = function(str) { 
    $('option', this).filter(function() { 
     return $(this).text() == str; 
    })[0].selected = true; 

    return this; 
}; 

// Use it like this 
$('#c').labselect('Red'); 
+0

. Co powiedzieli na ''? – Tomalak

+0

+1 teraz. Nie widzę powodu, aby ograniczać go do '

+0

Moje pytanie nie było wystarczająco szczegółowe, ale mimo to odpowiedziałeś, że muszę wybrać etykietę, więc niestandardowa funkcja jest drogą do zrobienia. – Stomped

-1

Spróbuj kod:

$('#c').val("325"); 
2
$('#c').val('Red'); 

nie powinien mieć (imho) pracował w jQuery 1.3, bo "Red" nie jest wartością. "325" to. Co robi to zrobić:

$('#c').val("325"); 
+0

Działa w wersji 1.3.2, whysoever. – aefxx

+0

Wiem, że to, co umieścisz, sprawi, że zadziała; ale w tym przypadku nie mam dostępu do wartości, muszę ustawić ją na etykiecie. Moje krótkoterminowe rozwiązanie polegało na przejściu na wersję jQuery 1.3.2 – Stomped

1
$('#c').val('325'); 

lub

// earlier - define a text-equals selector 
jQuery.extend(jQuery.expr[":"], { 
    "text-equals": function (a, i, m) { 
    return (a.textContent||a.innerText||jQuery(a).text()||'')==m[3]; 
    } 
}); 

// later - use it 
$red = $('#c option:text-equals(Red)'); 
$('#c').val($red.val()); 

Selektor zwyczaj jest możliwe. Możesz również zrobić dokładnie to samo na przykład w wywołaniu zwrotnym filter().

Powiązane problemy