Выбор параметра в раскрывающемся списке «Выбрано» при загрузке страницы

В моем проекте у меня есть раскрывающийся список, в котором отображаются разные коды валют со всего мира. В этом раскрывающемся списке используется подключаемый модуль 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");
            }
        }
    }

Если я внесу изменение в раскрывающийся список, это изменение будет реплицировано по всей странице, но не для начальной записи.


person Nick Chambers    schedule 21.03.2013    source источник
comment
Не могли бы вы опубликовать соответствующий код из вашей модели и контроллера? Я быстро попробовал ваш код и не заметил проблемы.   -  person Andreas Schwarz    schedule 22.03.2013
comment
Я внес правку в свой вопрос. Я думаю, что мне действительно нужно, возможно, какой-нибудь JavaScript, чтобы просто выбрать любую опцию, которая в данный момент находится в первой записи раскрывающегося списка, возможно?   -  person Nick Chambers    schedule 22.03.2013
comment
Предполагается, что это поведение по умолчанию. Не могли бы вы также написать, как выглядит сгенерированный HTML?   -  person Andreas Schwarz    schedule 22.03.2013
comment
Я добавил некоторые элементы управления JavaScript в свой вопрос. Выпадающий список заполняется в IE, но изменения не будут отражаться на странице, если я не переделаю выбор.   -  person Nick Chambers    schedule 22.03.2013


Ответы (1)


Попробуй это!

$(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();
});

Должен инициировать событие изменения при загрузке и повторно выбрать выбранную опцию.

person Danwilliger    schedule 22.03.2013