私のプロジェクトでは、世界中のさまざまな通貨コードを表示するドロップダウン オプションがあります。このドロップダウンは、「Chosen」jQuery プラグインを利用しています。通貨コードを選択すると、ページ内のすべての適切な記号が変わります。たとえば、GBP を選択すると英国ポンド (£) が表示され、USD は米ドル ($) が表示されます。
ページの読み込み時に、ユーザーのデフォルトの通貨がモデルに基づいてリストから選択されるようになります。下記を参照してください:
@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");
}
}
}
ドロップダウンに変更を加えると、変更はページ全体に複製されますが、最初のエントリには複製されません。