我确信这是相对容易和直截了当的,但我没有成功搞清楚。
我正在尝试使用以下代码设置下拉列表元素的选定选项:
if ($(this).attr("tagName") == "SELECT") {
oldValue = $(this).parent().parent().find('span.displayField').text();
$(this).val(oldValue).attr("selected", "selected");
return;
}
但它根本没有改变选择元素。代码肯定在运行,oldValue
正在正确填充。
任何人都可以看到我可能缺少的东西吗?
谢谢!
更新:
为了澄清,这是HTML:
<span class="displayField">Pending</span>
<span class="editField">
<select data-val="true" data-val-number="The field ProgramStatusId must be a number." data-val-required="The ProgramStatusId field is required." id="ProgramListViewModels_0__ProgramStatusId" name="ProgramListViewModels[0].ProgramStatusId">
<option value="1">Pending</option>
<option value="2">Tabled</option>
<option value="3">Approved</option>
<option value="4">Declined</option>
</select>
</span>
答案 0 :(得分:2)
$(this).val(oldValue)
会将this
的值设置为oldValue
,您只想找到该texy的选项。您想使用:contains()
进行此操作。
if ($(this).is('select')) {
oldValue = $(this).parent().parent().find('span.displayField').text();
$('option:contains('+oldValue+')', this).attr("selected", "selected");
return;
}
或者,如果有多个选项包含文本但不同,请尝试以下操作:
if ($(this).is('select')) {
oldValue = $(this).parent().parent().find('span.displayField').text();
$('option', this).filter(function(){
return this.text === oldValue;
}).attr("selected", "selected");
return;
}
答案 1 :(得分:1)
如果我正确理解您的代码段。我相信您要做的是选择与text()
具有相同$('span.displayField')
的项目。
if ($(this).attr('tagName') == 'SELECT') {
// unselect previously selected element first.
var prev = $(this).find('option:selected').attr('selected', false);
// select item with text from span.displayField
var oldText = $(this).parent().parent().find('span.displayField').text();
var oldOption = $(this).find('option[text="' + oldText + '"]');
oldOption.attr('selected', true);
}
答案 2 :(得分:0)
我不明白那是什么
).parent().parent().
如果您只想设置选择框值,请尝试这些
$('select.foo option:selected').val(); // get the value from a dropdown select
$('select.foo').val(); // get the value from a dropdown select