我有一个已知值的下拉列表。我要做的是将下拉列表设置为我知道使用jQuery存在的特定值。 使用常规的JavaScript,我会做如下的事情:

ddl = document.getElementById("ID of element goes here");
ddl.value = 2; // 2 being the value I want to set it too.

然而,我需要用jQuery做到这一点,因为我使用CSS类为我的选择器(愚蠢的ASP。NET客户端id…)。

以下是我尝试过的一些方法:

$("._statusDDL").val(2); // Doesn't find 2 as a value.
$("._statusDDL").children("option").val(2) // Also failed.

我如何用jQuery做到这一点?


更新

所以事实证明,我第一次就说对了:

$("._statusDDL").val(2);

当我把警报放在上面时,它工作得很好,但当我删除警报并让它全速运行时,我得到了错误

无法设置所选属性。无效的指数

我不确定这是jQuery或Internet Explorer 6的bug(我猜是Internet Explorer 6),但这非常烦人。


当前回答

这些解决方案似乎假设下拉列表中的每个项都有一个val()值,该值与它们在下拉列表中的位置相关。

如果不是这样,事情就复杂了。

要读取下拉列表的选定索引,您可以使用以下命令:

$("#dropDownList").prop("selectedIndex");

要设置下拉列表的选定索引,您可以使用以下命令:

$("#dropDownList").prop("selectedIndex", 1);

注意prop()特性需要JQuery v1.6或更高版本。

让我们看看如何使用这两个函数。

假设您有一个月份名称的下拉列表。

<select id="listOfMonths">
  <option id="JAN">January</option>
  <option id="FEB">February</option>
  <option id="MAR">March</option>
</select>

你可以添加一个“前一个月”和“下一个月”按钮,它会查看当前选择的下拉列表项,并将其更改为前一个月/下个月:

<button id="btnPrevMonth" title="Prev" onclick="btnPrevMonth_Click();return false;" />
<button id="btnNextMonth" title="Next" onclick="btnNextMonth_Click();return false;" />

下面是这些按钮运行的JavaScript代码:

function btnPrevMonth_Click() {
    var selectedIndex = $("#listOfMonths").prop("selectedIndex");
    if (selectedIndex > 0) {
        $("#listOfMonths").prop("selectedIndex", selectedIndex - 1);
    }
}
function btnNextMonth_Click() {
    //  Note:  the JQuery "prop" function requires JQuery v1.6 or later
    var selectedIndex = $("#listOfMonths").prop("selectedIndex");
    var itemsInDropDownList = $("#listOfMonths option").length;

    //  If we're not already selecting the last item in the drop down list, then increment the SelectedIndex
    if (selectedIndex < (itemsInDropDownList - 1)) {
        $("#listOfMonths").prop("selectedIndex", selectedIndex + 1);
    }
}

我的网站也有助于展示如何使用JSON数据填充下拉列表:

http://mikesknowledgebase.com/pages/Services/WebServices-Page8.htm

其他回答

如何将值加载到下拉列表或决定选择哪个值?如果使用Ajax执行此操作,那么在选择发生之前需要延迟的原因可能是因为在执行相关行时没有加载值。这也解释了为什么在设置状态之前将警告语句放在行上时它会工作,因为警报操作将为数据加载提供足够的延迟。

如果你正在使用jQuery的Ajax方法之一,你可以指定一个回调函数,然后放入$("._statusDDL").val(2);到回调函数中。

这将是一种更可靠的处理问题的方式,因为您可以确保方法在数据准备就绪时执行,即使它花费的时间超过300毫秒。

你需要像这样使用隐藏字段:

$("._statusDDL").val(2);
$("._statusDDL").change();

or

$("._statusDDL").val(2).change();
<asp:DropDownList id="MyDropDown" runat="server" />

使用$(“选择[名称$ = ' MyDropDown '] ") .val()。

在研究了一些解决方案后,这对我来说很管用。

我有一个带有一些值的下拉列表,我想从另一个下拉列表中选择相同的值…首先我放入一个变量,第一个下拉菜单的selectIndex。

var indiceDatos = $('#myidddl')[0].selectedIndex;

然后,在第二个下拉列表中选择该索引。

$('#myidddl2')[0].selectedIndex = indiceDatos;

注意:

我想这是最短、可靠、通用和优雅的解决方案。

因为在我的例子中,我使用selected option的data属性而不是value属性。 所以如果你对每个选项都没有独特的价值,上面的方法是最简单和甜蜜的!!

试试

$("._statusDDL").val("2");

而不是和

$("._statusDDL").val(2);