我正在使用一个遗留的 asp.NET 应用程序,该应用程序从业务层或数据层的深处动态构建一个 ddl。我的问题是,如果在应用程序中将 ddl 设置为必需,它只会显示可用的选择,顶部没有空白选项。这会导致忽略选择的用户在不知不觉中将列表中的第一个选项提交为“有效”选择,并且永远不会收到通知。我无法到达这个代码服务器端,所以我试图用 JQuery 处理它的客户端。我在页面上确实有自定义用户控件,因此我可以通过 c# 或 .ascx 文件在必要时插入代码。
到目前为止我所做的是编写一些 JQuery 来挑选出这些特定的 ddls,在前面加上一个<option>
空白<select>
,然后尝试查看是否有任何项目已从服务器标记为已选,决定是否将新空白标记为已选项目。该代码有效,除了能够确定服务器是否提供了选定的选项。我正在使用 $(document).ready 函数,认为我可以在浏览器呈现它之前访问它来操作 DOM,但我发现当服务器推出一个没有选定选项的 ddl 时(源标记验证没有被标记为选中),当我的 JQuery 运行时,服务器列表中的第一项已设置为选中(标记仍显示未选中,但通过 js 警报进行故障排除显示第一项确实已经在 DOM 中标记为选中)。在页面默认选择第一项之前,我有什么办法可以在 DOM 中操作 ddl?这是我的jQuery:
$(document).ready(function() {
$("select[id*='ddl_field']").each(function () {
var ddlVar = $(this).children(':first');
var setDefault = true;
$(this).children().each(function() {
if ($(this).attr('selected') == 'selected') {
alert($(this).html() + ' is selected');
setDefault = false;
}
});
if (ddlVar.attr('value') == 0 && ddlVar.text() != "") {
$(this).prepend("<option value=''></option>");
if (setDefault == true)
$(this).val('');
}
});
});
上面的代码有效,但它从不将 评估if (setDefault == true)
为真实条件。关于我所缺少的任何想法?
编辑:让我补充一点,实际的标记是在 c# 数据层中构建的。我在用户控件中唯一可以访问的是正在返回的表行,预先构建了 2 列,一列带有要返回的字段的标签,另一列带有输入,在本例中为 ddl。我无法到达实际的 ddl 服务器端,我只能在行级别进行操作。