【问题标题】:First Item in Dropdown list loses attribute下拉列表中的第一项丢失属性
【发布时间】:2012-07-06 18:45:08
【问题描述】:

我有一个动态创建的下拉列表,其中包含一个用户列表。如果用户遇到某个我应用样式属性来突出显示用户。我的 ListItems 都将正确突出显示,除了 List 上的第一个。第一个会以这种方式行事并且与其他人不同,这似乎很奇怪。

    ddlSupervisorList.Items(ddlSupervisorList.Items.Count - 1).Attributes.CssStyle.Value = "background:#cc66ff;"

如果我选择另一个用户,新选择的用户仍将保持其突出显示,但第一个用户仍不会突出显示。

我什至尝试过以下操作:

If ddlSupervisorList.SelectedItem.Equals(ddlSupervisorList.Items(ddlSupervisorList.Items.Count - 1)) Then
   ddlSupervisorList.SelectedItem.Attributes.CssStyle.Value = "background:#cc66ff;"
End If

但它仍然不会在加载时突出显示第一项(默认项)。

【问题讨论】:

  • 为什么您的选择标准 = "ddlSupervisorList.Items.Count - 1"。这只是为了演示目的,还是您实际上是在尝试选择列表中的最后一项?
  • 老实说,if 语句只是试图强制如果最后更新的项目是选定项目,那么我将强制“SelectedItem”将其属性附加到 CSSStyle。
  • 您是否尝试过使用 firebug 或 ie dev 工具来查看实际应用于项目的样式属性?也许其他东西会覆盖您应用的样式。
  • 它看起来是微软默认设置超过了它。它确实表明该样式已应用于项目。添加 !important 不会覆盖它。
  • 让我们看看正在渲染的 HTML。

标签: asp.net css vb.net


【解决方案1】:

最终我使用了一些 JQuery 和 javascript 来解决这个问题。我拿起下拉列表 ID 并获得了选定的选项。如果它应该突出显示'availableSelected'是cssclass,那么我将它添加到列表行的下拉列表的css中。

var userClientId = '#<%= ddlSupervisorList.ClientID %>';
var selectedId = userClientId + ' option:selected';
function clientIdChanged() 
{
    if ($(selectedId).hasClass('availableSelected')) {
        $(userClientId).addClass('availableSelected');
    }
    else {
        $(userClientId).removeClass('availableSelected');
    }
}
$(document).ready(function() {
    clientIdChanged();
    $(userClientId).bind('change', clientIdChanged);
});

【讨论】:

    【解决方案2】:

    如果它是动态生成的,请确保您没有将它放在 if(!page.IsPostBack) 中。在 page_load 上,您必须使用您想要的样式重新渲染下拉菜单。

    【讨论】:

    • 我已经检查过了,它与 isPostBack 没有任何关系,因为它正在维护所有其他列表项的样式,而不是第一个。
    猜你喜欢
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多