2013-10-29 55 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'上的腳本,而不是等待更改事件。 –