Закрытие JQuery UI модального из другой функции - PullRequest
0 голосов
/ 22 сентября 2011

еще раз. У меня есть скрипт, который использует плагин пользовательского интерфейса jQuery для генерации встроенных модальных окон, например:

function openModal(src, width, title){
    $("#" + src).dialog({
        modal: true,
        width: width,
        title: title,
        resizable: false,
        show: 'fade',
        hide: 'fade'
    });
    $('.ui-widget-overlay').hide().fadeIn();
    return false;
}

$(document).ready(function() {
    $('#newTopicBtn').click(function(e) {
        e.preventDefault();
        openModal('newTopic', 650, 'New Topic');
    });
});

Модальное окно всплывает так же, как и должно.

Большинство этих модальных окон открывают какие-то формы. Проблема в том, что когда форма отправляется и обрабатывается сценарием, я не могу заставить модальное закрытие формы при использовании $('#newTopic').dialog("close"):

$('#newTopic_form').bind('submit', function() {
    var error = '';

    var topicTitle = $('input[name=newTopicTitle]').val();
    var topicBody = $('textarea[name=newTopicBody]').val();

    if(topicTitle == '' || topicTitle.length < 2)
    {
        error = error + '<br />You must enter a longer title.';
    }
    if(topicBody == '' || topicBody.length < 2)
    {
        error = error + '<br />You must enter a longer topic.';
    }

    if(error != '')
    {
        $('#newTopicError').css("display","none");
        $('#newTopicError').html(error);
        $('#newTopicError').fadeIn(1000);
    }
    else
    {
        var pageUrl = window.location.search;
        var pattern = /mode=viewcat&id=(\d+)&title/gi;
        var catID = pageUrl.match(pattern);

        var data = 'mode=newTopic&cat_id=' + catID + '&title=' + encodeURIComponent(topicTitle) + '&content=' + encodeURIComponent(topicBody) + '&u=' + usrId;
        $.ajax({
            url: "data.php",
            type: "POST",
            dataType: "json",
            data: data,
            cache: false,
            success: function(data) {
                if(data.response == 'added')
                {
                    $('#newTopicError').css("display", "none");
                    $('#newTopicError').html("You have added your topic.");
                    $('#newTopicError').fadeIn(1000);
                    setInterval(10000, function(){
                        $('#newTopic').dialog("close");
                    });
                }
            }
        });
    }
    return false;
});

Форма отправляется и обрабатывается отлично, а правильные строки исчезают в области ответа формы модала, но окно никогда не закрывается.

Существует также проблема с моим RegEx, так как он возвращает только null вместо catID, если кто-то тоже хочет помочь с этим. :)

1 Ответ

3 голосов
/ 22 сентября 2011

Я думаю

setInterval(10000, function(){
    $('#newTopic').dialog("close");
});

должно быть:

setTimeout(function(){
    $('#newTopic').dialog("close");
}, 10000);

Исходный код имеет параметры в неправильном порядке, и он говорит, что вы хотите закрыть диалог каждые 10 секунд.Новый код имеет параметры в правильном порядке и будет выполняться только один раз, через 10 секунд после установки.

...