2012-07-19 13 views
19

Próbuję utworzyć przycisk, który może wybrać następną opcję.Wybierz następną opcję z jQuery

Więc mam select (id = selectionChamp) z kilkoma opcjami, wejście obok (id = fieldNext), a ja staram się robić to:

$('#fieldNext').click(function() { 
    $('#selectionChamp option:selected', 'select').removeAttr('selected') 
      .next('option').attr('selected', 'selected'); 

    alert($('#selectionChamp option:selected').val());  
}); 

Ale nie mogę wybrać kolejną opcję .. Dzięki !

+0

Czy ładujesz DOM po wczytaniu strony? – Dev

+0

Co masz na myśli? –

+0

oznacza, czy używasz tego kodu w gotowej funkcji? – Dev

Odpowiedz

22
$('#fieldNext').click(function() { 
    $('#selectionChamp option:selected').next().attr('selected', 'selected'); 

    alert($('#selectionChamp').val());  
}); 
+1

Broken w FF 32.0.3 – njahnke

+4

Wymaga również odznaczenia aktualnej opcji, np. '$ ('# selectionChamp opcja: wybrana'). attr ('selected', false);' – anthonygore

+0

tak ... ale tylko wtedy, gdy ustawiono wiele atrybutów na tagu select.However, możesz dowolnie aktualizować odpowiedź, jeśli chcesz to ... – bugwheels94

0
$('#fieldNext').click(function() { 
$('#selectionChamp option:selected').removeAttr('selected') 
     .next('option').attr('selected', 'selected'); 

alert($('#selectionChamp option:selected').val());  
}); 
0

Spróbuj tego:

$(document).ready(function(){ 
     $("#fieldNext").on("click",function(){ 
      $optionSelected = $("#selectionChamp > option:selected"); 
      $optionSelected.removeAttr("selected"); 
      $optionSelected.next("option").attr("selected","selected");  
     }); 
    }); 
2
$(function(){ 
    $('#button').on('click', function(){ 
    var selected_element = $('#selectionChamp option:selected'); 
    selected_element.removeAttr('selected'); 
    selected_element.next().attr('selected', 'selected'); 

    $('#selectionChamp').val(selected_element.next().val()); 

    }); 
}); 

http://jsbin.com/ejunoz/2/edit

8

Całkiem proste bez jQuery. Ta pętla wokół jednego wola do pierwszej opcji raz ostatni został osiągnięty:

function nextOpt() { 
    var sel = document.getElementById('selectionChamp'); 
    var i = sel.selectedIndex; 
    sel.options[++i%sel.options.length].selected = true; 
} 

window.onload = function() { 
    document.getElementById('fieldNext').onclick = nextOpt; 
} 

Niektóre testy markup:

<button id="fieldNext">Select next</button> 
<select id="selectionChamp"> 
<option>0 
<option>1 
<option>2 
</select> 
+0

+1. Masz napisane dobre waniliowe rozwiązania JS! Pomaga dużo! – A1rPun

0

Inne rozwiązania nie działają w przypadku istnieją optiongroup elementów oprócz opcji elementy. W tym przypadku, to wydaje się działać:

var options = $("#selectionChamp option"); 
var i = options.index(options.filter(":selected")); 
if (i >= 0 && i < options.length - 1) { 
    options.eq(i+1).prop("selected", true); 
} 

(Możesz myśleć, że wyrażenie dla i można także zapisać jako options.index(":selected"), ale to nie zawsze działa nie wiem dlaczego, wyjaśnienie będzie. witamy.)