Попытка отправить одну форму Javascript, а вместо нее две формы

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

У меня есть две независимые формы с разными идентификаторами, но когда я пытаюсь отправить одну из них, они обе отправляются одновременно. Может быть, код JS можно упростить, поскольку обе формы имеют одинаковое количество столбцов?

         <form method="post" action="#" id="formMor" class="Morning">
            <table id="formMor" class="Morning">


            <button id="save" class="Morning1" type="submit">Save</button>

        </form>



        <form method="post" action="#" id="formEven" class="Evening">
            <table id="formEven" class="Evening">

            </table>

            <button id="save" class="Evening1" type="submit">Save</button>

        </form>
  

и script.js

 'use strict';


$(document).on("formEven").submit(function(event) {
    event.preventDefault();

    var routineType = $("#formEven").attr('class');
    var newFormData = [];
    jQuery('#formEven tr:not(:first)').each(function(i) {
        var tb = jQuery(this);
        var obj = {};
        obj['Nr.'] = i;
        tb.find('input, textarea, select').each(function() {
            obj[this.name] = this.value;
        });
        newFormData.push(obj);
    });
    console.log(newFormData);

});

$(document).on("formMor").submit(function(event) {
    event.preventDefault();

    var routineType = $("#formMor").attr('class');
    var newFormData = [];
    jQuery('#formMor tr:not(:first)').each(function(i) {
        var tb = jQuery(this);
        var obj = {};
        obj['Nr.'] = i;
        tb.find('input, textarea, select').each(function() {
            obj[this.name] = this.value;
        });
        newFormData.push(obj);
    });
    console.log(newFormData);
});
  

Комментарии:

1. $(document).on("formEven").submit не имеет никакого смысла.

Ответ №1:

Вы неправильно настраиваете обработчик отправки, прототипом для on является .on( events [, selector ] [, data ], handler ) то, что вы передаете идентификатор.
Поскольку вы выбрали документ и использовали .on() его, я предполагаю, что вы хотите использовать делегирование событий. Кроме того, у вас есть повторяющиеся идентификаторы в вашем HTML, каждый идентификатор должен быть уникальным.

 $(document).on("submit", "#formEven", function(event) {
    event.preventDefault();

    var routineType = $("#formEven").attr('class');
    var newFormData = [];
    jQuery('#formEven tr:not(:first)').each(function(i) {
        var tb = jQuery(this);
        var obj = {};
        obj['Nr.'] = i;
        tb.find('input, textarea, select').each(function() {
            obj[this.name] = this.value;
        });
        newFormData.push(obj);
    });
    console.log(newFormData);

});

$(document).on("submit", "#formMor", function(event) {
    event.preventDefault();

    var routineType = $("#formMor").attr('class');
    var newFormData = [];
    jQuery('#formMor tr:not(:first)').each(function(i) {
        var tb = jQuery(this);
        var obj = {};
        obj['Nr.'] = i;
        tb.find('input, textarea, select').each(function() {
            obj[this.name] = this.value;
        });
        newFormData.push(obj);
    });
    console.log(newFormData);
});


<form method="post" action="#" id="formMor" class="Morning">
    <table id="formMor-table" class="Morning">


    <button id="save-formMor" class="Morning1" type="submit">Save</button>

</form>

<form method="post" action="#" id="formEven" class="Evening">
    <table id="formEven-table" class="Evening">

    </table>

    <button id="save-formEven" class="Evening1" type="submit">Save</button>

</form>