Программно выберите <option> в <select> с помощью jQuery
У меня есть ситуация, когда мне нужно программно выбрать вариант в рамках выбора. Кажется, я не могу найти ответ, и мой мозг превращается в кашу... Это то, что я пытался (и другие варианты).
$("#location_list option[value='"+LID+"']").attr("selected", "selected");
Любая помощь будет с благодарностью!
Спасибо!
Вот окружающий код...
function loc_commitData(location_data, update_loc)
{
if (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
else
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
populate_loc_list('<?php echo $CompanyID; ?>', $("input:radio[name='locationstatus']:checked").val());
bind_events_to_location_list();
$("#location_list").val(xmlhttp.responseText);
}
}
xmlhttp.open("GET", "includes/save_location_data.php?" + location_data, true);
xmlhttp.send();
};
Вот HTML-фрагмент, где location_list вставляется в теги span...
<fieldset style="margin-right: 15px;">
<legend>Locations</legend>
<span id="location_list_span"> THIS IS WHERE location_list GETS INSERTED ON THE FLY AFTER THE PAGE IS CREATED BY PHP</span>
</fieldset>
5 ответов
Попробуйте это вместо этого:
$("#location_list").val(LID);
Установка выпадающего значения должна помочь.
При использовании jquery 1.9.1 и jquery mobile 1.3.0 вы должны добавить оператор обновления:
$("#location_list").val(LID);
$("#location_list").selectmenu("refresh");
Я использовал этот код, и он работал для меня.
$("#selectID option")[index].selected = true;
После прочтения вашего комментария к Shadow Wizard (который предложил правильное решение), у вас может возникнуть одна из двух проблем:
проблема синхронизации - у вас есть такой код:
var LID = $("#location_list").val(); $.ajax(/*go get items for new select and populate it on success*/); $("#location_list").val(LID); //this will happen before the ajax return and populate the list
вы не возвращаете значение в новом списке или пытаетесь установить его значение по тексту
о, и забыл добавить решение к 1 - просто выберите старое значение в успешном обратном вызове вызова Ajax после повторного заполнения списка
$("#location_list").selectedIndex = index of the obj
;
РЕДАКТИРОВАТЬ:
ну, на самом деле у меня есть это в одном из моих старых сценариев, и да, это действительно работает, давая правильный индекс Однако, поскольку мы говорим о канонических путях, я пересек что-то вроде:
select.children("option").each(function () {
if ($(this).text().match(matcher)) {
this.selected = valid = true;
}
});
Почему я должен использовать родительский выбор вместо использования коллекции параметров?