2011-01-13 5 views
258

Я хочу установить опцию, которая была выбрана ранее для отображения на странице загрузки. Я пытался сделать это с помощью следующего кода:Установите выбранную опцию окна выбора

$("#gate").val('Gateway 2'); 

с

<select id="gate"> 
    <option value='null'>- choose -</option> 
    <option value='Gateway 1'>Gateway 1</option> 
    <option value='Gateway 2'>Gateway 2</option> 
</select> 

Но это не работает. Есть идеи?

+7

На самом деле так оно и должно работать, вы уверены, что задаете значение в документе document.ready()? Возможно, код выполняется, когда selectbox еще не готов. – Morph

ответ

385

Это определенно должно работать. Here's a demo. Убедитесь, что вы разместили свой код в $(document).ready:

$(function() { 
    $("#gate").val('Gateway 2'); 
}); 
+4

ok, когда я выпадаю из списка, он подсвечивается, но не отображается как первый элемент в списке –

+1

@ArtWorkAD, что вы подразумеваете под первым элементом в списке? Я не совсем понимаю ваше требование. –

+2

ahh Я объявил это не в документе, готовом функции ... спасибо! –

5

Это работает отлично. См. Эту скрипту: http://jsfiddle.net/kveAL/

Возможно, вам необходимо объявить ваш jQuery в обработчике $(document).ready()?

Возможно, у вас есть два элемента с одинаковым идентификатором?

124
$(document).ready(function() { 
    $("#gate option[value='Gateway 2']").prop('selected', true); 
    // you need to specify id of combo to set right combo, if more than one combo 
}); 
+0

Работает безупречно .. – Cyber

-1

У меня возникла проблема, когда значение не было установлено из-за синтаксической ошибки перед вызовом.

$("#someId").value(33); //script bailed here without showing any errors Note: .value instead of .val 
$("#gate").val('Gateway 2'); //this line didn't work. 

Проверьте наличие синтаксических ошибок перед вызовом.

+0

Полезно, так как напомним, что для проверки синтаксических ошибок это не ответ. –

-1
// Make option have a "selected" attribute using jQuery 

var yourValue = "Gateway 2"; 

$("#gate").find('option').each(function(i, opt) { 
    if(opt.value === yourValue) 
     $(opt).attr('selected', 'selected'); 
}); 
+1

Это будет зависеть от выбранного значения, которое неэффективно –

+0

Плюс '.attr()' был неправильным способом сделать это, так как задолго до того, как этот ответ был опубликован. – Auspex

0
$(function() { 
$("#demo").val('hello'); 
}); 
19

$('#gate').val('Gateway 2').prop('selected', true);

+2

Странные многие пропустили это решение. – adi518

+0

Очень похоже на '$ ('# ваш-select-box-id: nth-child (2)'). Prop ('selected', true)' который работает с визуальным обновлением выпадающего списка. –

1

Моя проблема

get_courses(); //// To load the course list 
$("#course").val(course); //// Setting default value of the list 

Я была такая же проблема. Единственное отличие от кода является то, что я загрузка выберите поле с помощью вызова Ajax и только Аякс вызова был выполнен я установить значение по умолчанию поля выбора

Решению

get_courses(); 
    setTimeout(function() { 
    $("#course").val(course); 
    }, 10); 
+0

Вы проанализировали проблему правильно, но решение плохое и хрупкое. вы должны использовать функцию обратного вызова, подключенную к вашему вызову ajax. – icksde

-2

Дополнение к @icksde и @Korah (спасибо оба!)

при построении вариантов с AJAX document.ready могут быть вызваны, прежде чем список будет построен, так

Это не работает

$(document).ready(function() { 
    $("#gate").val('Gateway 2'); 
}); 

Это делает

таймаут делает работу, но, как @icksde говорит, что это хрупкое (я на самом деле нужно 20ms в смену 10мс). Это лучше, чтобы вписать его в функции AJAX, как это:

$("#someObject").change(function() { 
    $.get("website/page.php", {parameters}, function(data) { 
     $("#gate").append("<option value='Gateway 2'">" + "Gateway 2" + "</option>"); 
     $("#gate").val('Gateway 2'); 
    }, "json"); 
}); 
9

Я нашел с помощью метода JQuery .val(), чтобы иметь существенный недостаток.

<select id="gate"></select> 
$("#gate").val("Gateway 2"); 

Если выбрать окно (или любой другой объект ввода) находится в форме и есть кнопка сброса используется в форме, когда кнопка сброса нажата установленное значение будет очищена и не сбрасывается в как и следовало ожидать.

Это, кажется, работает лучше всего для меня.

Для Выбор коробок

<select id="gate"></select> 
$("#gate option[value='Gateway 2']").attr("selected", true); 

Для текстовых входов

<input type="text" id="gate" /> 
$("#gate").attr("value", "your desired value") 

Для входов текстовой области

<textarea id="gate"></textarea> 
$("#gate").html("your desired value") 

Для CheckBox коробки

<input type="checkbox" id="gate" /> 
$("#gate option[value='Gateway 2']").attr("checked", true); 

Для радиокнопок

<input type="radio" id="gate" value="this"/> or <input type="radio" id="gate" value="that"/> 
$("#gate[value='this']").attr("checked", true); 
4
$("#form-field").val("5").trigger("change"); 
+0

Было бы неплохо, если бы вы включили некоторую информацию об этом. Это отличный пример того, как вы ДОЛЖНЫ делать это, ЕСЛИ у вас есть код, который следит за изменениями в выборе. –

3

Это будет еще один вариант:

$('.id_100 option[value=val2]').prop('selected', true); 
1

У меня была такая же проблема.

Решение: добавьте обновление.

$("#gate").val('Gateway 2'); 
$("#gate").selectmenu('refresh'); 
+0

Это только для jqueryui selectmenu, а не для стандартного html – stuartdotnet