Наложение инструментов Asp.Net MVC / jQuery: как закрыть его при возврате ajax - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть форма Ajax во всплывающем окне, которое я отображаю с вашим оверлеем. Я отправляю всплывающее окно через ajax, и мне нужно закрыть оверлей, если вызов ajax был успешным.

Вот мой код JS:

<script type="text/javascript">
    $(function () {
        // Handle form submit ...
        $("#AddVariableForm").live("submit", function (event) {
            event.preventDefault();
            var form = $(this);
            $.validator.unobtrusive.parse('#AddVariableForm');
            $.ajax({
                url: form.attr('action'),
                type: "POST",
                data: form.serialize(),
                success: function (data) {
                    if(data.Success){
                        $("#adm-form-addVariable").data("overlay").close();
                    }
                },
                error: function (jqXhr, textStatus, errorThrown) {
                    alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
                },
                complete: function () {
                    alert('complete');
                }
            });
            return false;
        });
    });

</script>

Проблема в том, что в данный момент он ничего не закрывает. Я дважды проверил режим отладки Chrome, он входит в метод, но ничего не делает. Я тоже проверил, ошибок JS нет.

Я пытался сделать

$("#adm-form-addVariable").overlay({ api: true }).close()

но та же проблема.

Вот как я это заявляю:

   $(".adm-btn-overlay-trigger[rel]").overlay(
        {
            mask: {
                color: '#111',
                loadSpeed: 300,
                opacity: 0.9
            },

            closeOnClick: true
        }
    );

Если я сделаю это:

$ ("# adm-form-addVariable"). Overlay ({api: true}). IsOpened ()

Я получаю неопределенное.

Что я делаю не так?

1 Ответ

1 голос
/ 27 февраля 2012

Я уверен, что вам нужно вызывать close на элементе триггера, а не наложение:

http://jsfiddle.net/Fwzwc/2/

В вашем случае $(".adm-btn-overlay-trigger[rel]").overlay().close();

Отказ от ответственности: Я никогда раньше не использовал инструменты jquery, но, как вы видите в моей скрипке js, похоже, что она работает.

Обновление: чтобы это работало с несколькими триггерами, вам нужно найти точный триггер, который открыл оверлей. См. http://jsfiddle.net/Fwzwc/3/ для примера.

Это сводится к тому, чтобы найти идентификатор оверлейного div и затем вызвать .overlay (). Close () для триггера, где rel = overlayId:

$("img[rel='#" + overlayId + "']").overlay().close();
...