#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
событие для динамически создаваемых элементов DOM2. вы должны привязать ее после добавления.
Ответ №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")
… вот почему это не работало