按文本设置SELECT元素,而不是值

时间:2011-05-16 15:46:10

标签: javascript jquery

我确信这是相对容易和直截了当的,但我没有成功搞清楚。

我正在尝试使用以下代码设置下拉列表元素的选定选项:

        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>

3 个答案:

答案 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().

如果您只想设置选择框值,请尝试这些

http://api.jquery.com/val/

$('select.foo option:selected').val();    // get the value from a dropdown select
$('select.foo').val();                    // get the value from a dropdown select