我有一个已知值的下拉列表。我要做的是将下拉列表设置为我知道使用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),但这非常烦人。


当前回答

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

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

or

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

其他回答

试试

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

而不是和

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

仅供参考,你不需要使用CSS类来完成这一点。

你可以写下面这行代码在客户端上获得正确的控件名称:

$("#<%= statusDDL.ClientID %>").val("2");

ASP。NET将在jQuery内部正确地呈现控件ID。

我使用一个扩展函数来获取客户端id,如下所示:

$.extend({
    clientID: function(id) {
        return $("[id$='" + id + "']");
    }
});

然后您可以调用ASP。jQuery中的NET控件如下:

$.clientID("_statusDDL")

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

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

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

所以我把它改了 在300毫秒使用后执行 setTimeout。现在好像起作用了。

在从Ajax调用加载数据时,我遇到过很多次这种情况。我也使用。net,当使用jQuery选择器时,它需要时间来调整到clientId。为了纠正您遇到的问题并避免必须添加setTimeout属性,您可以简单地在Ajax调用中放置“async: false”,它将给DOM足够的时间来返回您添加到select中的对象。下面是一个小样本:

$.ajax({
    type: "POST",
    url: document.URL + '/PageList',
    data: "{}",
    async: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {
        var pages = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;

        $('#locPage' + locId).find('option').remove();

        $.each(pages, function () {
            $('#locPage' + locId).append(
                $('<option></option>').val(this.PageId).html(this.Name)
            );
        });
    }
});