2012-10-03 1 views
6

Po kliknięciu przycisku chcę zmienić wybraną opcję na liście wyboru, odpowiadającą klikniętemu przyciskowi. To, co mam tak daleko, jsfiddleZmiana wybranej opcji przyciskiem kliknij

$('#btnCityAuckland').click(function(){ 
    $('#City').val('A'); 
}) 

mam pewne jQuery tam, ale jej chyba mile off jest prawo, jak mogę być takie proste.

Odpowiedz

14
$('#btnAuckland').click(function(){ 
    $('#City').val('A').trigger('change'); 
})​ 

Najwyraźniej można po prostu wywołać metodę .trigger() po ustawieniu wartości.

Demo: http://jsfiddle.net/8RUBj/11/

EDIT
Również, to lepiej, jeśli używasz data atrybuty, aby ustawić wartość, a zajęcia, a następnie można zrobić wszystkie przyciski za jednym zamachem.

$('.select-change').click(function(){ 
    $('#City').val($(this).data('val')).trigger('change'); 
})​ 

Demo v2: http://jsfiddle.net/8RUBj/15/

+0

Dokładnie to, czego szukałem. Nie widziałem wcześniej używanych .trigger(). Nauczyłem się czegoś nowego :) Dzięki stosy! – Jamesil

+0

@Jamesil - sprawdź aktualizację. Jest o wiele bardziej pomocny. – ahren

3

Twój kod ma rację, tylko że źle wpisany $('#btnCityAuckland'), to naprawdę jest:

$('#btnAuckland') 

Praca demo

Można także zautomatyzować wybierając opcję oparty na przycisk kliknięciu zamiast hardcoding Dokumentach interpretacyjnych , tak jak poniżej:

$('div > a').click(function(){ //click handler for all city buttons 
    $("#City option:contains('"+$(this).text()+"')").attr("selected",true); 
    $("#City").selectmenu('refresh', true); //Refresh to show name on select 
})​ 

Praca demo

+0

Tak, wartość zmienia się, ale nie jest to widoczna zmiana. (wybór nie jest aktualizowany i musi być uruchamiany ręcznie.) Dzięki jQuery Mobile.) – ahren

+0

Dzięki Nelson, I w pełni zgadzam się ahren. – Jamesil

+0

@Jamesil Dodałem wymagane połączenie odświeżania, więc wybierz wybiera zmianę. Możesz zobaczyć go w moim ostatnim kodzie, zobacz moją zaktualizowaną odpowiedź. – Nelson

1

Jeśli nie zostały przy użyciu jQuery Mobile, kod będzie działać tak jak jest. Z jQuery Mobile możesz dokonać odświeżenia pseudo-select wywołując .selectmenu("refresh") na nim następująco:

$('div[data-role="controlgroup"] a').click(function(){ 
     $('#City').val($(this).text().charAt(0)).selectmenu("refresh"); 
}); 

Demo: http://jsfiddle.net/8RUBj/18/

Należy pamiętać, że nie trzeba przypisać osobny obsługi kliknij dla każdego przycisku: dla celów demonstracyjnych pokazałem raczej przylegający sposób uczynienia kodu bardziej ogólnym tak, że będzie działał bez zmiany twojego html, ale możesz dodać atrybuty data- lub coś do przycisków, aby wskazać, jaka wartość jest z nimi powiązana.

More information about jQuery Mobile select methods.

+0

+1 - nie zauważyłem korelacji między pierwszym znakiem a wybraną wartością! – ahren

+0

Dzięki @ahren. Oczywiście pierwsza litera nie zadziałałaby, gdyby istniały dodatkowe miasta zaczynające się od tej samej litery, ponieważ musiałyby one mieć różne wartości w selekcji, ale tak jak powiedziałem powyżej, była to tylko demonstracja jednego sposobu na stworzenie kodu bardziej ogólny ... – nnnnnn