2014-03-12 77 views
0

我在視圖中有三個DDL。我在第一個DDL的'onchange'上啓動了一個javascript函數來填充第二個,第二個填充第三個。工作正常。MVC Dropdownlist Cascade - 如何在第一個ddl選擇更改時觸發第三個ddl上的事件?

問題是,當第一個DDL設置爲未選中,即「Select a Value」時,第二個DDL被觸發並將自己設置爲「Select a Value」,但第二個DDL的onchange事件不會觸發,所以第三個DDL仍然使用它從先前選擇中獲得的數據填充。

如何獲得第二個DDL來觸發我可以用來刷新第三個DDL的事件?還是有另一種方式?下面

代碼:

@{ 
    ViewBag.Title = "CascadingList"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
@{Html.EnableUnobtrusiveJavaScript(true);} 
<script type="text/javascript"> 
$(document).ready(function() { 

    getMarket(); 

}); 

function getMarket() { 
    var url = '@Url.Content("~/Strategies/MarketList")/'; 
    $.getJSON(url, function (data) { 
     var items = "<option>Select a Market</option>"; 
     $.each(data, function (i, market) { 
      if (market.Value.indexOf("\'") > -1) { 
       s = market.Value + " " + market.Text; 
       alert(s + ": Market.Value cannot contain \'") 
      } 
      items += "<option value='" + market.Value + "'>" + market.Text + "   </option>"; 
     }); 
     $('#MarketsID').html(items); 
    }); 
} 

function getShareType() { 
    var url = '@Url.Content("~/Strategies/ShareTypeList")/' + $('#MarketsID').val(); 
    $.getJSON(url, function (data) { 
     var items = '<option>Select an Asset Type</option>'; 
     $.each(data, function (i, shareType) { 
      items += "<option value='" + shareType.Value + "'>" + shareType.Text + " </option>"; 
     }); 
     $('#ShareTypesID').html(items); 
    }); 
} 

function getShare() { 
    var url = '@Url.Content("~/Strategies/ShareList")/' + $('#MarketsID').val() + '|' + $('#ShareTypesID').val(); 
    $.getJSON(url, function (data) { 
     var items = '<option>Select a Share</option>'; 
     $.each(data, function (i, share) { 
      items += "<option value='" + share.Value + "'>" + share.Text + "</option>"; 
     }); 
     $('#SharesID').html(items); 
    }); 
} 
</script> 

<h2>Strategy</h2> 

<div id="MarketsDivID"> 
    <label for="Markets">Markets</label> 
    <select id="MarketsID" name="Markets" onchange="getShareType()"></select> 
</div> 

<div id="ShareTypesDivID"> 
    <label for="ShareTypes">ShareTypes</label> 
    <select id="ShareTypesID" name="ShareTypes" onchange="getShare()" ></select> 
</div> 

<div id="SharesDivID"> 
    <label for="Shares">Shares</label> 
    <select id="SharesID" name="Shares" ></select> 
</div> 

回答

0

謝謝 - 我試過了,並繞了圈圈 - 但它讓我有不同的想法。通過向填充第二個DDL的函數中填充第三個DDL的函數添加一個調用來修復它 - 這種方式總是被調用。

function getShareType() { 
    var url = '@Url.Content("~/Strategies/ShareTypeList")/' + $('#MarketsID').val(); 
    $.getJSON(url, function (data) { 
     var items = '<option>Select an Asset Type</option>'; 
     $.each(data, function (i, shareType) { 
      items += "<option value='" + shareType.Value + "'>" + shareType.Text + "</option>"; 
     }); 
     $('#ShareTypesID').html(items); 
    }); 
**** Added This **** 
    getShare(); 
} 
0

嘗試使用$('#selectID').val()填充它之後選擇了select的值,如果不工作觸發onchange這樣; $('#selectID').trigger('change')

相關問題