用于DDL的MVC PlaceHolder消失了**

时间:2013-10-29 16:02:55

标签: asp.net-mvc razor drop-down-menu placeholder

我看过很多帖子和人们使用像这样的DDL占位符的例子...... @Html.DropDownList("lstUsers",(SelectList)ViewBag.UsersList, "--Select User--")

@Html.DropDownListFor(u => u.RoleID, Model.RoleList, "Select", new { @id="hi"})

我的意思是这些工作,但我希望占位符在ddl索引更改后消失,所有这些都是为第一个索引放置虚拟文本,然后可以再次选择。 我一直无法找到我的生活答案。我试过jquery

$("#tb2").attr("placeholder", "--Please Select--"

适用于文本框,但不适用于DropDown。我正在使用动态生成的ddl的

谢谢!

1 个答案:

答案 0 :(得分:1)

这不是select元素的工作原理。 “占位符”实际上是选择列表中的完整选项。它的值通常设置为空字符串,这样如果它仍然在POST上被选中,则会发布一个空字符串,如果该字段预计有值,则会导致错误。它不仅会自动消失。

文本框完全不同。当占位符文本放在文本框中时,它实际上被用户输入覆盖,因此它消失了。在HTML5中,文本框现在具有实际的placeholder属性,该属性将根据输入的焦点显示和隐藏一些文本。但是,select元素没有等价物。

你可以通过一些额外的JavaScript来做你想做的事情。您只需要在select上观察更改事件,如果它有值(而不是“占位符”),那么您可以从select中删除第一个项目(应该是占位符):

$('#mySelect').on('change', function () {
    if ($(this).val() != '') {
        var firstChild = $(this).children().eq(0);
        if (firstChild.prop('value') == '') firstChild.remove();
    }
});

(我在这里使用jQuery是因为在直接的JavaScript中做同样的事情会更加艰难,因为你使用的是ASP.NET MVC,所以你也可以使用jQuery这是一个安全的选择)