Отправить форму при изменении элементов

В jQuery, если я назначу class=auto_submit_form форме, она будет отправляться при каждом изменении любого элемента со следующим кодом:

/* automatically submit if any element in the form changes */
$(function() {
  $(".auto_submit_form").change(function() {
    this.submit();
  });
});

Однако, если я хочу, чтобы форма отправлялась только при изменении указанных элементов:

/* submit if elements of class=auto_submit_item in the form changes */
$(function() {
  $(".auto_submit_item").change(function() {
    $(this).parents().filter("form").submit();
  });
});

Я только изучаю jQuery. Есть лучший способ сделать это?

это специальный плагин, который вы используете, или это какие-то встроенные функции jQuery, о которых я никогда не слышал?

nickf 01.12.2008 05:22
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
1
38 209
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий
 /* submit if elements of class=auto_submit_item in the form changes */
$(function() {
   $(".auto_submit_item").change(function() {
     $("form").submit();
   });
 });

Предполагается, что у вас есть только одна форма на странице. Если нет, вам нужно будет выбрать форму, которая является предком текущего элемента, используя $(this).parents("form").submit().

используя "this.form.submit ();" было бы даже лучше, потому что вам не нужно было бы создавать экземпляр объекта jQuery.

nickf 01.12.2008 05:20

@tvanfosson какие-нибудь советы, как предотвратить обновление страницы с помощью этого решения? preventDefault() и return false не работают :(

Toon 22.12.2015 21:21

@Toon этот код заставляет форму выполнять обычную отправку. Если вы не хотите, чтобы страница обновлялась, сериализуйте форму и отправьте ее через AJAX. var $form = $('form'); var data = $form.serialize(); $.ajax($form.attr('action'), { data: data, type: 'POST' }).done(...);

tvanfosson 23.12.2015 07:41

Вы можете использовать выражение в методе parents() для фильтрации родителей. Следовательно, это могло бы быть немного более эффективным:

/* submit if elements of class=auto_submit_item in the form changes */
$(".auto_submit_item").change(function() {
    $(this).parents("form").submit();
});

Я бы дал форме идентификатор:

$(".auto-submit-item").change(function() {
    $("form#auto-submit").submit();
});

Я придумал общий подход к этому:

$('.autoSubmit, .autoSubmit select, .autoSubmit input, .autoSubmit textarea').change(function () {
    const el = $(this);
    let form;

    if (el.is('form')) { form = el; }
    else { form = el.closest('form'); }

    form.submit();
});

Все элементы формы:

<form class = "autoSubmit">
    <select><option>1</option><option>2</option></select>
</form>

Только отдельные элементы

<form>
    <select class = "autoSubmit"><option>1</option><option>2</option></select>
</form>

Другие вопросы по теме