2013-03-21 139 views
3

在我的項目中,我有一個下拉選項,顯示來自世界各地的不同貨幣代碼。此下拉菜單使用「Chosen」jQuery插件。在選擇貨幣代碼時,頁面中所有適當的符號都會發生變化,即選擇英鎊將顯示英鎊(£),而美元將顯示美元($)。在頁面加載中選擇下拉列表中的選項

在頁面加載時,基於模型從列表中選擇用戶的默認貨幣。請看下面:

@Html.DropDownListFor(model => model.CurrencyCode, Model.CurrencyList != null ? Model.CurrencyList : new SelectList(new[] { "" }), Model.CurrencyCode != null ? Model.CurrencyCode.ToString() : "--Select Currency Code--", new { id = "CurrencyCode", onchange = " CurrencySymbol($('#hidesubtotal').val(), $('#hidevat').val(), $('#hidetotal').val(),$('#hidediscount').val()); ", @class = TransactionHelpers.cssClass(Validation, "CurrencyCode", "chzn-select"), style = "width:200px; text-align:left;" }) 

這個工作在兩個Chrome和Firefox罰款,正確的選項被選中,所有相關的佔位符反映的選擇。但是,在Internet Explorer中呈現時,這將被忽略,下拉列表的默認選擇是「選擇選項」,而不是用戶的貨幣代碼,應該預先選擇該選項。通過添加以下參數'@data_placeholder = Model.CurrencyCode',我可以讓IE使用正確的代碼填充下拉列表,但除非用戶重新選擇和選項,否則這些更改不會反映其他地方。

什麼是最好的方式去這樣做,以便IE瀏覽器反映負載的變化沒有進一步的交互?任何幫助將不勝感激。

編輯:由於這裏要求的是代碼的模型,其中一個貨幣代碼在TransactionViewModel通過一個片段:

public string CurrencyCode { get; set; } 

而且還JavaScript的處理:

var selectedCurrency = $('#CurrencyCode option:selected').text(); 
    if (selectedCurrency != '--Select Currency Code--') { 
     var matchedCurrecyOptions = $("#CurrencyCode option:contains('" + selectedCurrency + "')"); 
     if (matchedCurrecyOptions.length == 2) { 
      var currencyValue = matchedCurrecyOptions[1].value; 
      if (typeof currencyValue !== 'undefined') { 
       $('#CurrencyCode option:selected').val(currencyValue).trigger("liszt:updated"); 
      } 
     } 
    } 

如果我對下拉菜單進行更改,更改將在整個頁面上進行復制,但不會用於初始條目。

+0

你可以發佈你的模型和控制器的相關代碼嗎?我很快嘗試了你的代碼,並沒有注意到這個問題。 – 2013-03-21 22:47:21

+0

我在我的問題中進行了編輯。我認爲我真正需要的可能是一些JavaScript,可能只是選擇當前第一個下拉列表中的任何選項,或許? – 2013-03-22 09:16:40

+0

它應該是默認行爲。你還可以寫出生成的HTML看起來像什麼? – 2013-03-22 09:20:26

回答

0

試試這個吧!

$(function() { 
    $("#currencyCode").change(function() { 
    var selectedCurrency = $('#CurrencyCode option:selected').text(); 
    if (selectedCurrency != '--Select Currency Code--') { 
     var matchedCurrecyOptions = $("#CurrencyCode option:contains('" + selectedCurrency + "')"); 
     if (matchedCurrecyOptions.length == 2) { 
      var currencyValue = matchedCurrecyOptions[1].value; 
      if (typeof currencyValue !== 'undefined') { 
       $('#CurrencyCode option:selected').val(currencyValue).trigger("liszt:updated"); 
      } 
     } 
    } 

    }).trigger(); 
}); 

應該在加載時觸發更改事件並重新選擇所選選項。

相關問題