2013-03-21 126 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(); 
}); 

应该在加载时触发更改事件并重新选择所选选项。

相关问题