2012-06-26 64 views
0

我目前有一個在頁面加載時填充的下拉列表,有時下拉列表中不包含任何內容並且爲空。我希望在列表中沒有任何項目時隱藏下拉列表。我以爲我可以通過JavaScript做到這一點,但我不知道我可能做錯了什麼,因爲在添加JavaScript後,它仍然出現在頁面上。列表爲空時隱藏下拉列表

選擇下拉菜單:

<select data-bind="options: endReason() ? endReason().SubReasons : [], value: subReasonId, optionsText: 'Text', optionsValue: 'Value', visible: isChecked" 
          name="subReasons"> 
         </select> 

這是我的javascript:

<script type="text/javascript"> 
function OnClientDropDownOpening(sender, eventArgs) 
{ var combo = $find("<%= subReasons %>"); 
    items = combo.get_items(); 
    if(items.get_count()==0) 
    { 
     eventArgs.set_cancel(true); 
    } 
} 
</script> 
+0

糾正我,如果我錯了,但似乎借力knockoutjs – d3v1lman1337

回答

5

爲什麼要使用JavaScript?似乎帶寬完全是浪費時,你可以在服務器端使用的條件,甚至不呈現DDL如果沒有任何元素來呈現:

@if (Model.Items.Count() > 0) 
{ 
    @Html.DropDownListFor(x => x.SelectedItemId, Model.Items) 
} 
+1

簡單而優雅的代碼。只是一個側面說明:如果你不使用剃刀,下面基本上做同樣的事情:<%:if(Model.Items.Count()> 0){%> ... html這裏<%: } %> – d3v1lman1337

0

下,您需要包括jQuery庫。

<script type="text/javascript"> 
$().ready(function() { 
    if ($('select[name=subReasons]').length == 0) 
     $('select[name=subReasons]').remove(); 
}); 
</script> 
+0

就像我說的,它需要包含jQuery庫。 另外,是的,它刪除了DDL。他已經聲明它是在頁面加載時填充的,如果它不包含任何元素,他希望它消失。所以是的,我正在刪除DDL。 更合適的解決方案是達林提供的解決方案,但前提是他使用剃刀來表達他的觀點。否則,他可以包含他的HTML在 <%:if(Model.Items.Count()> 0){%> ... html這裏 <%: } %> 也沒有提及剃刀或事實模型可能不是包含用於填充此特定組合框的元素的枚舉。 – d3v1lman1337

0

這應該做的工作在純JavaScript:

var select = document.getElementById("select"); 
var options = select.getElementsByTagName("option"); 
document.write('Select has ' + options.length + ' options');​ 

jsFiddle