我正在使用一个遗留的asp.NET应用程序,该应用程序从业务层或数据层的内部动态构建ddl。我的问题是,如果在应用程序中将ddl设置为必需,它只显示可用的选择,顶部没有空白选项。这导致忽略选择的用户在不知情的情况下将列表中的第一个选项作为“有效”选择提交,并且从不被通知。我无法进入这个代码服务器端,所以我试图用JQuery处理它的客户端。我在页面上有自定义用户控件,因此如有必要,我可以通过c#或.ascx文件插入代码。
到目前为止,我所做的是编写一些单独使用这些特定ddls的JQuery,在<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服务器端,我只能在行级操作。
答案 0 :(得分:0)
所以我放弃了JQuery。我最终反映了核心代码中的代码,绕过并将新功能硬编码到我的用户控件中。