#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
В настоящее время я создал это простое приложение, в котором вы можете добавлять поля ввода с помощью кнопки. Затем, когда лимиты достигнуты, это не позволяет вам добавлять больше, и отображается сообщение о максимальном поле ввода. У вас также есть возможность удалить только что добавленные поля. Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как повторно активировать кнопку добавления, когда пользователь удалил некоторые поля ввода. Я довольно новичок в jQuery, поэтому, если есть лучший способ написания кода, я весь внимание. Я воссоздал свой пример в JSfiddle: http://jsfiddle.net/jTh3v/367 /.
Я хотел это сделать, когда вы нажали кнопку удаления, подобную такой:
$("#remove").click(function(e){
$("#MAX").hide('<p>MAX</p>');
});
Ответ №1:
Вместо этого:
$("#Input").on("click","#remove", function(e){
e.preventDefault(); $(this).parent('div').remove(); x--;
});
Попробуйте это:
$("#Input").on("click","#remove", function(e){
e.preventDefault();
$(this).parent('div').remove();
x--;
$("#add").prop("disabled",false);
$("#MAX").find('p').remove();
});
Ответ №2:
Внутри вашего
$("#Input").on("click","#remove", function(e){
Для повторного включения кнопки добавления вам нужно:
$("#add").prop("disabled",false);
Чтобы удалить МАКСИМАЛЬНОЕ сообщение, вы можете:
$("#MAX p:first").remove();
Обновленная скрипка.
Вот фрагмент:
$(document).ready(function() {
var max_fields = 5;
var x = 1;
$("#add").click(function(e){
e.preventDefault();
if(x < max_fields){
x ;
$("#Input").append(
'<div><input type="text" name="mytext[]"/><a href="#" id="remove">Remove</a></div>'
);
} else if(x == max_fields){
$("#MAX").append('<p>MAX</p>');
$(this).prop("disabled",true);
}
});
$("#Input").on("click","#remove", function(e){
e.preventDefault();
x--;
$("#add").prop("disabled",false);
$(this).parent('div').remove();
$("#MAX p:first").remove();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="add">Add</button><hr>
<input type="text" name="mytext[]">
<div id="Input"></div>
<div id="MAX"></div>
Комментарии:
1. вам не нужно это условие
if (x<=0) { x = 0; return; }
, так как первое условиеif(x < max_fields){
должно быть больше 0, чтобы быть истинным2. @SergioAlen Большое спасибо. Если у меня нет элементов для удаления, я не могу уменьшить x.
Ответ №3:
Чтобы снова включить кнопку добавления, добавьте $('#add').prop('disabled', false);
в обработчик click
события удаления.
Кроме того, для максимального отображения я бы рекомендовал ввести <p>Max</p>
html и установить #MAX
div style="display:none;"
равным, а затем использовать $('#MAX').show()
и $('#MAX').hide()
для отображения индикатора MAX. Если вы последуете моим инструкциям и добавите приведенный выше код для повторного включения кнопки добавления, вы поймете, почему:
- Индикатор MAX остается на странице после повторного включения кнопки
- Как только вы снова включите кнопку добавить, а затем нажимаете ее снова, пока не достигнете максимального количества полей во второй раз,
<p>MAX</p>
к ним добавляется дополнительноеdiv
, создавая повторяющиеся индикаторы.
Ответ №4:
Есть способ
$("#Input").on("click","#remove", function(e){
e.preventDefault();
$(this).parent('div').remove(); x--;
$('#MAX').html('');
if( x===4 ){
$('#add').prop('disabled', false);
}
});
Он включает кнопку добавления один раз, когда вы удалили свой пятый элемент.
Вот jsfiddle
Ответ №5:
Вы должны проверить, превышает ли лимит количество полей ввода при удалении одного из них.
$(document).ready(function() {
var max_fields = 5;
var x = 1;
$("#add").click(function(e){
e.preventDefault();
if(x < max_fields){
x ;
$("#Input").append(
'<div><input type="text" name="mytext[]"/><a href="#" id="remove">Remove</a></div>'
);
}else if(x == max_fields){
$("#MAX").append('<p>MAX</p>');
$(this).prop("disabled",true);
}
});
$("#Input").on("click","#remove", function(e){
e.preventDefault(); $(this).parent('div').remove(); x--;
if(x < max_fields){ //here you check if lower than limit
$('#add').prop("disabled", false);
$("#MAX").html(''); //deleting the content of max
}
});
});
Ответ №6:
В обработчике #remove
события щелчка
$("#Input").on("click", "#remove", function(e) {
e.preventDefault(); $(this).parent('div').remove(); x--;
});
добавьте следующую строку, чтобы обновить disabled
свойство #add
:
$('#add').prop('disabled', false);
Пример:
$("#Input").on("click", "#remove", function(e) {
e.preventDefault(); $(this).parent('div').remove(); x--;
$('#add').prop('disabled', false);
$('#MAX').hide();
});