2009-08-14 4 views
42

Как я могу, используя jQuery, установить «следующий» элемент уже выбранного элемента как «выбранный».jQuery Set Выбранный вариант с использованием следующего

Например, если у меня есть:

<select> 
<option value="1" >Number 1</option> 
<option value="2" selected="selected">Number 2</option> 
<option value="3" >Number 3</option> 
<option value="4" >Number 4</option> 
</select> 

Мы можем видеть, что «номер 2» выбран, и с помощью JQuery, я хотел бы установить «номер 3», как выбрано, и удалить выбранное «атрибут» от «Номер 2». Я предполагаю, что мне нужно использовать селектор следующий, но я не совсем уверен, как его реализовать.

+0

Существует еще одна тема с большой информацией о том, как получить выбранные варианты, которые были полезны (это действительно послало меня сюда). Протектор здесь: http://stackoverflow.com/questions/1280499/jquery-set-select-index –

ответ

60
$('option:selected', 'select').removeAttr('selected').next('option').attr('selected', 'selected'); 

Заканчивать рабочий код здесь http://jsbin.com/ipewe/edit

+0

Удаляет ли атрибут из текущего выбранного? Я могу ошибаться, но думаю, что нет? Вызов '.attr' должен быть заменен на .prop для любой последней версии jquery, насколько я знаю, правильно? – codeling

6

вы можете использовать

$('option:selected').next('option') 

или

$('option:selected + option') 

и установите значение:

var nextVal = $('option:selected + option').val(); 
$('select').val(nextVal); 
115

Update:

По JQuery 1.6+ вы должны использовать prop() вместо attr() в этом случае.

Разница между атрибутами и свойствами может иметь важное значение для конкретных ситуаций в . До jQuery 1.6 метод .attr() иногда учитывал значения свойств при извлечении некоторых атрибутов, , что может привести к непоследовательному поведению. Начиная с jQuery 1.6 метод .prop() обеспечивает способ явного извлечения значений свойств, в то время как .attr() извлекает атрибуты.

var theValue = "whatever"; 
$("#selectID").val(theValue).prop('selected',true); 


Оригинал Ответ:

Если вы хотите выбрать по стоимости опциона, независимо от его положения (в этом примере предполагается, что у вас есть идентификатор для вашего выбора):

var theValue = "whatever"; 
$("#selectID").val(theValue).attr('selected',true); 

Вам не нужно «отменить выбор». Это происходит автоматически при выборе другого.

+0

Ваш ответ - более округлый ответ. Это почти год спустя помогло. Благодарю. –

+4

Год спустя да, но я просто столкнулся с этим кодом. Вы допустили одну небольшую ошибку, предположив, что элемент автоматически не выбирается при выборе другого. Это не тот случай, когда список опций является множественным выбором. Я просто хотел указать на это, если кто-то ожидал этого поведения и был расстроен тем, что он не работал как рекламируемый. – SRM

+0

@SRM - Хорошая точка. Я, лично, никогда не работаю с несколькими выборами ... так что это никогда не приходило мне в голову. Спасибо за добавление разъяснений. – GtotheB

3

И если вы хотите указать выберите идентификационный:

$("#nextPageLink").click(function(){ 
    $('#myselect option:selected').next('option').attr('selected', 'selected'); 
    $("#myselect").change(); 
}); 

Если щелкнуть по пункту с идентификатором «nextPageLink», следующий вариант будет выбран и OnChange() событие будет называться. Это может выглядеть так:

$("#myselect").change(function(){ 
    $('#myDivId').load(window.location.pathname,{myvalue:$("select#myselect").val()}); 
}); 

Событие OnChange() использует Ajax для загрузки чего-либо в указанный div.

окно.location.pathname = фактический адрес

Событие OnChange() определено, поскольку оно позволяет изменять значение не только с помощью кнопки netx/prev, но и напрямую с использованием стандартного выбора. Если значение изменено, страница делает что-то автоматически.

+0

+1 для указания, что «.change()» необходимо вызвать вручную. Не зная, что это может вызвать кошмары. – everton

+0

Изменение было моей проблемой, значение было выбрано, но не показано в раскрывающемся списке. – avgbody

0

Найдите строку, а затем

var row = $('#yourTable'); 

значение, которое вы хотите выбрать

var theValue = "5"; 
row.find("select:eq(2)").find("option[value="+theValue+']').attr('selected','selected'); 
0
$('#next').click(function(){ 
    $('#colored_background option:selected').next('option').attr('selected', 'selected'); 
    changeBackgroundColor(); 
}); 

Работа в What is my favorite color?. Нажмите на стрелки.

+0

Прохладный сайт! Почему бы не отобразить изображение и не выбрать разные части? – DevlshOne

17

Начиная с версии 1.6.1 на, то целесообразно использовать метод подпорку для булевых атрибутов/свойств, таких, как выбрано, только для чтения, включен, ...

var theValue = "whatever"; 
$("#selectID").val(theValue).prop('selected',true); 

Для получения дополнительной информации, пожалуйста, обратитесь к к http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/

1

Это то, что я просто использовал, я люблю, как чистый это :-)

$('select').val(function(){ 
    var nextOption = $(this).children(':selected').next(); 
    return $(nextOption).val(); 
}).change(); 
0
$("select").prop("selectedIndex",$("select").prop("selectedIndex")+1) 
1
$('your_select option:selected').next('option').prop('selected', true) 
0
$('#my_sel').val($('#my_sel option:selected').next().val()); 
$('#my_sel').val($('#my_sel option:selected').prev().val());