Функция jQuery не работает при отправке проверенной формы - PullRequest
0 голосов
/ 02 марта 2012

Я использую плагин jquery galleryview и добавил возможность приостанавливать слайд-шоу при щелчке ссылки (отображение формы), а затем перезапускать при нажатии кнопки закрытия.

Это прекрасно работает (см. Ниже), но я также хотел бы, чтобы показ слайдов начался при отправке формы. Я могу сделать это, добавив кнопку отправки в список элементов, который перезапускает слайд-шоу, но если форма не проходит проверку, я не хочу, чтобы слайд-шоу перезапускалось.

Вот мой код просмотра галереи (сокращенно):

(function($){
    $.fn.galleryView = function(options) {
    // Some code
        return this.each(function() {
        // Some more code
            $("#closeEnquiry").click(function(){
                restartGallery();
            });

            function restartGallery(e) {
                // Code to restart gallery
            }
        }
    }
}

А вот моя форма отправки / проверки кода (функция restartGallery не запускается):

$(document).ready(function(){
    $("#enquiryForm").validate({
        debug: false,
        rules: {
            YourName: {
                required: true,
            },
            YourEmail: {
                required: true,
                email: true,
            },
        },
        messages: {
            YourName: "Please let us know who you are.",
            YourEmail: "A valid email will help us get in touch with you."
        },
        submitHandler: function(form) {

            $.post('projectform.php', $("#enquiryForm").serialize(), function(data) {
                closePopup();
                $('#enquiryFormContainer').prepend(data);
                restartGallery();  // This does not run...
            });

        }
    });
}); 

Есть идеи, как я могу запустить функцию restartGallery из функции validate?

1 Ответ

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

Однажды у меня была похожая проблема, когда объекты JQuery становились недействительными (удалялись) после изменения DOM через AJAX.

Поэтому я предполагаю, что после выполнения $('#enquiryFormContainer').prepend(data) некоторые объекты DOM (и их обработчики событий), на которые ссылается restartGallery(), становятся недействительными.Например, если restartGallery() ссылается на переменную, которая была инициализирована следующим образом: var myDiv = $("#myDiv"), то вам нужно будет повторно инициализировать ее после завершения вызова AJAX.

...