SimpleModal - вызов "modal ()" для того же элемента - PullRequest
0 голосов
/ 23 марта 2011

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

  1. Страница загружена.
  2. Пользователь нажимает кнопку, чтобы открыть модальное окно.
  3. В модальном режиме пользователь вводит (вводит) всю необходимую ему информацию.
  4. Данные подтверждены. Если проверка не удалась, новый модал должен появиться с ошибкой. Идея состоит в том, чтобы иметь модальное окно, которое должно работать так же, как функция JavaScript ().
  5. Когда ошибка видна, предыдущий модал должен исчезнуть. Как только пользователь нажимает кнопку ОК, ошибка должна исчезнуть, и должен появиться старый модал.

Теперь я искал ответ и увидел несколько сообщений Эрика Мартина (разработчика SimpleModal), в котором говорится о наличии нескольких модальных окон. Похоже, что SimpleModal его не поддерживает, и он рекомендует заменить содержимое модального на новое.

Я пытаюсь сделать следующее:

  1. Прежде чем показывать предупреждение, я сохраняю идентификатор открытого модала.
  2. Скрыть все открытые модалы (скрыть div).
  3. Показать предупреждение и привязать кнопку ОК.
  4. Когда пользователь нажимает кнопку ОК, я закрываю текущий модальный (оповещения), получаю имя старого div и снова показываю его, вызывая ShowDialog ("getSubsidiariesForCustomer").

Моя проблема в том, что когда я пытаюсь выполнить последнюю команду, она не работает. После исследования кажется, что реализация плагина SimpleModal сохраняет флаг, если функция modal () была вызвана для определенного элемента.

Только для общих знаний:

  1. Я использую простой модал 1.41
  2. Похоже, я в строке 216 в JS:

    // не разрешать множественные звонки if (s.d.data) { вернуть ложь; }

Мой код только после этого раздела: Я начинаю с запуска логики "jBtnNew_Click":

Admin.BL.SettingsPage.jBtnNew_Click=function(e)
{
    Admin.BL.EcmSettings.ShowDialog("#getSubsidiariesForCustomer");
    alert(""); //Just for debugging
    Admin.BL.EcmSettings.ShowAlert();
}

Admin.BL.SettingsPage.ShowAlert=function()
{
    var id = $("div.model:visible").eq(0).attr("id");
    $("#alertBtnOk").one("click", function(e){
        $.modal.close();
        if (id != undefined)
        {
            Admin.BL.SettingsPage.ShowDialog(id);
        }
    }
    );
    Admin.BL.SettingsPage.ShowDialog("#alert");
}

Admin.BL.SettingsPage.ShowDialog=function(dialogId)
{
    if (dialogId.indexOf("#") < 0)
    {
        dialogId = "#" + dialogId;
    }
    $("div.model").hide();
    $("#dialog").modal({position:new Array("20%"),
    overlayId:"dialog-overlay",
    containerId:"confirm-container"});
    $(dialogId).show();
}

А это мой HTML:

Получить дочерние компании Пользовательский ИД: Имя покупателя: Это мое предупреждение

Буду признателен за любую помощь в решении этой проблемы !!

Спасибо:)

1 Ответ

2 голосов
/ 23 марта 2011

Я думаю, что ваша проблема (# 4) может быть связана с кодом setTimeout, который есть в SimpleModal для решения проблем Opera.Мне нужно удалить его, но сейчас вы можете попробовать отредактировать источник SimpleModal, найдя следующее:

setTimeout(function(){
    // opera work-around
    s.d.overlay.remove();

    // reset the dialog object
    s.d = {};
}, 10);

И заменив его на:

s.d.overlay.remove();
// reset the dialog object
s.d = {};

Дайте мне знать, если это такне работает для вас ...

...