以编程方式选择一个<;选项>;在a<;选择>;使用jQuery

以编程方式选择一个<;选项>;在a<;选择>;使用jQuery,jquery,select,option,Jquery,Select,Option,我有一种情况,我需要在select中以编程方式选择一个选项。我似乎找不到答案,我的大脑变得一团糟。。。这就是我一直在尝试的(以及其他各种变化) 任何帮助都将不胜感激 谢谢 这是周围的代码 function loc_commitData(location_data, update_loc) { if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest()

我有一种情况,我需要在select中以编程方式选择一个选项。我似乎找不到答案,我的大脑变得一团糟。。。这就是我一直在尝试的(以及其他各种变化)

任何帮助都将不胜感激

谢谢

这是周围的代码

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();     
    };
功能定位提交数据(位置数据、更新定位)
{   
if(window.XMLHttpRequest)
{
xmlhttp=新的XMLHttpRequest();
}
其他的
{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
填充_loc_列表(“”,$(“输入:radio[name='locationstatus']:checked”).val();
将事件绑定到位置列表();
$(“#位置列表”).val(xmlhttp.responseText);
}
}
open(“GET”,“includes/save_location_data.php?”+location_data,true);
xmlhttp.send();
};
以下是HTML代码段,其中位置列表插入到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>

位置
这是PHP创建页面后动态插入位置列表的地方
试试这个:

$("#location_list").val(LID);
设置下拉值。

$(“#位置列表”)。选择的索引=对象的索引

编辑:

事实上,我在我的一个旧脚本中有这个,是的,它实际上可以提供正确的索引。然而,自从我们谈论规范化的方法以来,我已经跨越了一些类似的东西:

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

为什么我应该使用父选择而不是使用选项集合?

阅读您的“对阴影的评论”向导(该向导建议了正确的解决方案)后,您可能会遇到以下两个问题之一:

  • 计时问题-您有如下代码:

    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调用的成功回调中选择旧值

    当使用jquery 1.9.1和jquery mobile 1.3.0时,您必须添加一条刷新语句:

    $("#location_list").val(LID);
    $("#location_list").selectmenu("refresh");
    

    我使用了这个代码,它对我很有效。
    
    
    $(“#selectID选项”)[index].selected=true;
    

    仅供参考,
    .attr()
    对属性来说是件坏事。如果您想以编程方式选择某些内容,最好使用
    .prop('selected',true\u或false)
    。这同样适用于复选框及其
    checked
    属性。但无论如何,影子向导的解决方案要好得多。响应文本可能不等于任何选项的值。让
    警报(xmlhttp.responseText)
    自己看看。嗯。。。你说得对。。。出于某种原因,我的PHP正在回显一个空字符串。。。(我想这是另一个问题)。但即使我只是将数字3硬编码到.val('3')。。。这与其中一个位置匹配,但仍然是一个禁区。。。我快发疯了,现在是凌晨3:30,我累了非常感谢!回复评论时请使用
    @
    ,例如
    @Shadow
    将通知我。。我现在碰巧看到了这个。无论如何,
    .val(“3”)
    将选择任何值为3的选项,即
    此处的某些文本
    ,因此为
    填充位置列表
    发布代码,我们可能会看到更好的结果。@Shadow我发现了我的问题!!除了动态创建外,#location_列表从未实际创建过。。。因此,当您在浏览器中查看代码时,它甚至不在那里!它的html代码,即。。。因此,$(“#location_list”).val(xmlhttp.responseText)不起作用,因为根据我的jQuery代码#位置\u列表不存在。。。哈!在ajax调用中创建的整个html代码被插入到一个标记中……这个想法可能可行,但您的语法是错误的,这太过分了。-1)发布不起作用的代码,b)混合使用jquery和直接com访问(这几乎就是(a)的原因)。设置
    selectedIndex
    的正确方法是
    $('location_list').prop('selectedIndex',idx)
    $('#位置列表')[0]。选择的索引为idx
    @小偷谢谢,我不熟悉
    .prop
    方式-这在jQuery中是新的吗<代码>$(“#位置列表”)[0]
    是有风险的,当没有这样的元素时,它会错误地崩溃。是的,我认为它是在1.5中添加的。在此之前,
    .attr()
    可能起作用,但直接访问字段从未起作用。实际上,
    [0]
    是个坏主意,但它仍然是访问底层DOM元素的有效方法。BigMike-工作并不意味着它是好的。当您可以在一行中使用时,为什么要迭代所有选项并使用复杂的代码?如果你能解释一下它的好处,那就太好了。。。试过了。不过谢谢你。。。这让人非常沮丧。这并不重要,但我正在做的是在对MySQL表进行更改后动态构建一个选择列表,然后使用新数据重建选择列表。。。我希望在重建后选择相同的选项。。。有意义吗?;)正如您在链接的JSFIDLE中看到的,它是有效的。在重建列表之前,存储选定的值,例如
    LID=$(“#location_list”).val()那么它应该可以正常工作。Hmpf。。。我现在可以看到你的在JSFIDLE中工作,但由于某种原因我的不工作。。。看起来我需要自己做一些事情。。。谢谢
    
    $("#location_list").val(LID);
    $("#location_list").selectmenu("refresh");