我在下面粘贴了我的代码。基本上,我想更新选择框的选项,然后将其值重置为更新选项之前的值。不幸的是,这不起作用。知道为什么吗?
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中不同的值参数,这就是为什么这些值不匹配的原因。当我解决这个问题时,许多这些代码变体都有用。非常感谢大家的帮助:)。
答案 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/
我在函数中添加了一个前缀参数,以便我可以看到更改,但除此之外它是相同的代码。
检查您是否发现代码使用有任何不同。