Метка, правильно связанная с переключателем, только при первой загрузке диалогового окна jQuery UI - PullRequest
1 голос
/ 03 марта 2012

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

Вот сценарий : при первой загрузке диалогового окна jQuery UI я могу щелкнуть ярлык, чтобы выбрать соответствующий переключатель. Я должен сказать, что мои радио-кнопки загружаются в форму в диалоге jQuery.

Проблема возникла, если я закрою, а затем снова открою диалоговое окно jQuery, тогда мои метки больше не будут связаны с переключателями (но все работает довольно хорошо, кроме этой точки).

enter image description here

Вот код моего помощника:

    public static MvcHtmlString RadioButtonFor2<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value, object labelText)
    {
        object currentValue = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model;
        string nameX = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).DisplayName;
        string uniqueId = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).DisplayName + "_" + value;

        TagBuilder htmlRadio = new TagBuilder("input");
        htmlRadio.MergeAttribute("type", "radio");
        htmlRadio.MergeAttribute("id", uniqueId);
        htmlRadio.MergeAttribute("name", nameX);
        htmlRadio.MergeAttribute("value", (string)value);

        if (currentValue != null && value.ToString() == currentValue.ToString()) htmlRadio.MergeAttribute("checked", "checked");

        TagBuilder htmlLabel = new TagBuilder("label");
        htmlLabel.MergeAttribute("for", uniqueId);
        htmlLabel.SetInnerText((string)labelText);

        return MvcHtmlString.Create(htmlRadio.ToString(TagRenderMode.SelfClosing) + htmlLabel.ToString());
    }

Этот код создает HTML-код, подобный следующему:

<input name="ADR" id="ADR_Yes" type="radio" value="Yes"/>
<label for="ADR_Yes">Oui</label>

Как видите, метка правильно связана с вводом.

У кого-нибудь есть идеи, почему он работает только при первой загрузке диода jQuery UI?

Я немного растерялся.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 марта 2012

Я наконец нашел решение:

Когда мне нужно закрыть диалоговое окно jquery, я должен полностью уничтожить его из DOM.

Я заменил эту строку:

$(this).dialog('close');

со следующим:

$(this).dialog('destroy').remove();

Может быть, это может помочь кому-то еще.

0 голосов
/ 03 марта 2012

Перепроверьте ваш обработчик радио в успехе Ajax. Когда вы вызываете его в первый раз, он будет работать только с существующими элементами в это время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...