2013-10-29 26 views
1

我见过那么多帖子和使用DDL占位符这样的人的例子...... @Html.DropDownList("lstUsers",(SelectList)ViewBag.UsersList, "--Select User--")MVC占位符DDL即消失**

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

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

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

它适用于文本框,而不是一个下拉菜单。我正在使用动态生成的ddl's

谢谢!

回答

1

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

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

你可以用一些额外的JavaScript做你想做的事。你只观看上的选择更改事件,如果它有一个值(不是“占位符”),那么你可以删除从选择的第一项(这应该是占位符):

$('#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)

+0

谢谢!我一直在寻找一个关于这个开关的答案。现在我想弄清楚如果'!ModelState.IsValid'继续存在。我敢肯定它的一个简单的解决方案即时通讯没有考虑 – CSharper

+0

任何人使用旧版本的Jquery,你可能只需要使用$('#mySelect')。change和attr而不是prop – CSharper

+1

你可以简单地运行相同的内部位'$(document).ready'上的脚本,而不是等待更改事件。 –