jquery、javascript、根据焦点更新下拉列表选项,但保留选定值

jquery、javascript、根据焦点更新下拉列表选项,但保留选定值,javascript,jquery,Javascript,Jquery,大脑现在不工作。有人帮我填一下这里的空白 需要选择当前选定的值,重新填充选项,然后选择上一个选择(如果仍在列表中) 为了简化操作,新值和以前选择的值将具有相同的名称属性,前提是更新后它仍在列表中,并且名称在选项列表中始终是唯一的 //assume Options is a globally defined var for this example with format: // [{"display":"something", "value": "something's value"}, et

大脑现在不工作。有人帮我填一下这里的空白

需要选择当前选定的值,重新填充选项,然后选择上一个选择(如果仍在列表中)

为了简化操作,新值和以前选择的值将具有相同的名称属性,前提是更新后它仍在列表中,并且名称在选项列表中始终是唯一的

//assume Options is a globally defined var for this example with format: 
// [{"display":"something", "value": "something's value"}, etc.. ]
function LazyLoadOptionsIntoSelect($select, options)
{
    //get current option


    //repopulate options
    $select.html("");
    $("<option>").text("--Select a File--")
                .appendTo($select);
    $.each(options, function()
    {
        var item = this;
        $("<option>").attr("name", function () { return item.display; })
                .val(function () { return item.value; })
                .text(item.display)
                .appendTo($select);
    });

    //select previously selected option if still in list

}

$(".lazyloadedselect", "#context").live("focus", function() 
{  
    LazyLoadOptionsIntoSelect($(this), Options);
});

编辑:我的代码中有错误,与问题无关,但如果选项保留相同的值属性,则仍然错误:

//get current option
var theOption = $select.val();
后来

//select previously selected option if still in list
$select.val(theOption);
编辑

您需要修复填充代码中的错误,因为这些选项实际上都没有值属性,这可能就是您无法正确设置select的值的原因:

$.each(options, function(index, item) {
    $("<option>")
        .attr("value", item.display)
        .text(item.display)
        .appendTo($select);
});

请注意,名称不是选项元素的标准属性。

huuuuuuuuh。。。。。嗯,我的也不行!我首先尝试了,它在现在打开的下拉列表中突出显示该选项,但将第一个选项显示为值。可能跟所有东西都被触发的顺序有关?我以前也做过同样的事情,克隆表单并保留下拉列表的值,但在这种情况下不起作用。@Patrick:我添加了一个编辑,指出原始代码填充选项的方法中存在错误,这将阻止新选项具有与其关联的值,并阻止您使用以前选择的项更新select的值。