Программно выберите <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");

Проверьте это на jsfiddle

Я использовал этот код, и он работал для меня.
$("#selectID option")[index].selected = true;

После прочтения вашего комментария к Shadow Wizard (который предложил правильное решение), у вас может возникнуть одна из двух проблем:

  1. проблема синхронизации - у вас есть такой код:

    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
    
  2. вы не возвращаете значение в новом списке или пытаетесь установить его значение по тексту

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

$("#location_list").selectedIndex = index of the obj;

РЕДАКТИРОВАТЬ:

ну, на самом деле у меня есть это в одном из моих старых сценариев, и да, это действительно работает, давая правильный индекс Однако, поскольку мы говорим о канонических путях, я пересек что-то вроде:

select.children("option").each(function () {
  if ($(this).text().match(matcher)) {
    this.selected = valid = true;
  }
});

Почему я должен использовать родительский выбор вместо использования коллекции параметров?

Другие вопросы по тегам