更新<option>标签后重置<select>值</option> </select>

时间:2011-05-20 18:59:57

标签: jquery select

我在下面粘贴了我的代码。基本上,我想更新选择框的选项,然后将其值重置为更新选项之前的值。不幸的是,这不起作用。知道为什么吗?

rebuildMeasurements = function(measurements, measurement_unit_id) {

    var selects = $('select.measure, select.yield_measurement_unit');
    var selected_value;


    $(selects).each(function() {

        $(this).data('selected_value', $(this).val());

        console.log('Original Value: ' + $(this).data('selected_value'));
        // this outputs what we would expect, the original value of the select box

        $(this).empty();

        $(this).append('<option value="_new">New Measurement...</option>');

        for(x in measurements) {
            $(this).append('<option value="' + measurements[x].measurement_unit_id + '">' + measurements[x].measurement + '</option>');
        }

        $(this).append('<option value="_new">New Measurement...</option>');

        $(this).val($(this).data('selected_value'));

        console.log($(this).val());
        // this does NOT output what we would expect, but instead outputs the value of
        // the first option in the select box, even though we explicitly set the
        // value to the original value directly above this line.

    });

    $(current_measurement_select).val(measurement_unit_id);

};

回答

这非常令人尴尬,但事实证明我在添加新选项标签时使用的是与原始HTML中不同的值参数,这就是为什么这些值不匹配的原因。当我解决这个问题时,许多这些代码变体都有用。非常感谢大家的帮助:)。

3 个答案:

答案 0 :(得分:0)

试试这个:

$(this).find('option[value=' + $(this).data('selected_value') + ']').attr('selected', 'selected');

答案 1 :(得分:0)

我没有测试它,但我认为它是一个forloop错误:

 for(x in measurements) {
                $(this).append('<option value="' + measurements[x].measurement_unit_id + '">' + measurements[x].measurement + '</option>');
            }



  x here is an item in measurements, so you must change it from  :

measurements[x].measurement_unit_id

要  x.measurement_unit_id

可能会帮助你

答案 2 :(得分:0)

您有两个值为_new的选项,这可能会导致该特定选项出现问题,但除此之外,代码没有问题。

我在jsfiddler中尝试过:http://jsfiddle.net/CXrqp/

我在函数中添加了一个前缀参数,以便我可以看到更改,但除此之外它是相同的代码。

检查您是否发现代码使用有任何不同。