Кнопки имеют тот же класс — одна отправляет форму, другая выполняет jQuery fine

#jquery #forms

#jquery #формы

Вопрос:

Я перепробовал все, что мог придумать.

Примечание: я пробовал настройку <button type="button"> , и это не исправило ее.

Начальная кнопка с тем же классом и тем же вызовом функции jQuery работает абсолютно нормально. Кнопка удаления работает. Это только вторая кнопка добавления поля ввода, которая отправляет форму.

Вот jFiddle, который я настроил, чтобы вы могли сразу протестировать его функциональность:

Обратите внимание, что в JSFiddle, если вы продолжаете нажимать верхнюю кнопку добавления, добавляется больше полей ввода.

Демонстрация кода в формате JSFiddle

jQuery

 $(document).ready(function() {
    var max_fields = 100;
    var wrapper = $(".wrapper");
    var add_button = $(".new-skill-field");

    var i = 1;
    $(add_button).click(function(e) {
        e.preventDefault();
        if (i < max_fields) { 
            i  ; 
            $(wrapper).append('<div><label>Skill Name:</label><input type="text" name="skillName[]" required><label>Skill Level:</label><input type="text" name="skillLevel[]" class="input-small" required><button class="new-skill-field">Add Another Skill</button><button class="remove-skill">Remove This Skill</button></div>');
        }
    });

    $(wrapper).on("click", ".remove-skill", function(e) {
        e.preventDefault();
        $(this).parent('div').remove();
        i--;
    });
});
  

HTML

 <div class="wrapper">
    <div>
        <label>Skill Name:</label>
        <input type="text" name="skillName[]" id="skillName" required>
        <label>Skill Level:</label>
        <input type="text" name="skillLevel[]" id="skillLevel" class="input-small" required>
        <button class="new-skill-field">Add Another Skill</button>
    </div>
</div>
  

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

1. Вы можете проверить on событие для динамически создаваемых элементов DOM

2. вы должны привязать ее после добавления.

Ответ №1:

Вы можете использовать on событие и слушать дальше document

 $(document).on("click", ".new-skill-field", function(e) {
}
  

Проверьте эту скрипку

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

1. Это работает отлично, спасибо! По какой-то причине Ted заставлял кнопки удаления полей ввода либо добавлять новые поля ввода, либо по какой-то причине не работать полностью, что странно, поскольку его код, похоже, просто использует переменную, а вы используете фактический класс в .on

2. По какой-то причине теперь он не передает массивы в форме в $_POST[«] , независимо от того, сколько я ввожу, он возвращает только первый.

Ответ №2:

измените привязку события к уровню документа, чтобы все будущие элементы управления тоже были подобраны

 $(document).ready(function() {
  var max_fields = 100;
  var wrapper = $(".wrapper");
  var add_button = $(".new-skill-field");

  var i = 1;
  $(document).on('click', ".new-skill-field", function(e) {
    e.preventDefault();
    if (i < max_fields) {
      i  ;
      $(wrapper).append('<div><label>Skill Name:</label><input type="text" name="skillName[]" required><label>Skill Level:</label><input type="text" name="skillLevel[]" class="input-small" required><button class="new-skill-field">Add Another Skill</button><button class="remove-skill">Remove This Skill</button></div>');
    }
  });

  $(wrapper).on("click", ".remove-skill", function(e) {
    e.preventDefault();
    $(this).parent('div').remove();
    i--;
  });
});
  

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

1. По какой-то причине кнопки удаления полей ввода действуют спонтанно, либо добавляя новые поля ввода, либо вообще ничего не делая, но никогда не удаляя поля.

2. вы правы, я думал, что add_button это равно ".new-skill-field" , но на самом деле это было равно $(".new-skill-field") … вот почему это не работало