Задать вопрос
@Otrivin
junior full-stack сисадмин

Как заставить срабатывать submit?

Здравствуйте!

Имеется сайт на drupal, необходимо сторонним php-скриптом получить данные с заполняемой формы.

Пытался с помощью jQuery собирать поля при сабмите, но скрипт не реагирует на отправку (форму находит, но не срабатывает именно submit - видимо, конфликт с каким-то другим обработчиком, на jsfiddle работает).
Как реализовать задуманное (и почему не навешивается моё событие)?

Код
(function($){
    $(document).ready(function(){
        console.log('скрипт подключился');

        var form1 = $('form#webform-client-form-127');
        console.log('form1 - ' + form1.length + ' штук найдено');

        //предполагается наличие 2-3 разных форм на странице, нужно отслеживать каждую
        //var form2 = $('form#');        
        var formsArray = [form1];

        formsArray.forEach(function(currentForm, index) {
            obrabotkaFormi(currentForm);
        });

        function obrabotkaFormi(currentForm){
            console.log('currentForm - ' + currentForm.length + ' штук найдено');

            $(document).on('submit', currentForm, function(){
                console.log('форма засабмичена');
                var data = currentForm.serialize();
                $.ajax({
                    type: 'POST',
                    url: '/example.php',
                    data: data
                }).done(function() {
                    console.log(data);
                    console.log('success');
                }).fail(function() {
                    console.log(data);
                    console.log('fail');
                });
            });
        }

    });
})(jQuery);


  • Вопрос задан
  • 1046 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
sM0kfyz
@sM0kfyz
Frontend dev.
var formsArray = [form1]
Это что?

Мне кажется, вам надо использовать такую конструкцию:
$("form").toArray()
Тогда в массиве будут сразу все формы на странице. Если надо отсеить, то можно использовать какой-нибудь data атрибут на нужных формах и выбрать в цикле только те формы, которые имеют этот атрибут.

$data = currentForm.serialize();
Заменить на
var data = currentForm.serialize();
И дальше везде в коде.
Ответ написан
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
1) (ванга мод он)Скорее всего на вашей страничке есть свой скрипт который тоже ловит событие субмита, обрабатывает данные формы и делает субмит формы методом .submit(); В таком случае не генерируется событие, а форма субмитится сразу. Соответственно ваше событие навешенное позже пролетает как фанэра.
решение - попробуйте повесить событие раньше чем родной скрипт. Или повесьте на другое событие(например клик на кнопку субмита)
2)
//предполагается наличие 2-3 разных форм на странице, нужно отслеживать каждую

тогда не проще так?
$(form).on('submit',function(e){
e.preventDefault();
// some code here
})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы