#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
я создаю динамическое поле ввода с выбором переключателя. Я делаю, но проблема есть.
Я пытаюсь сгенерировать только одно поле ввода для каждого последнего переключателя.
Проблема: когда я нажал на переключатель один раз, почему поле ввода генерирует больше 1.
jsfiddle: http://jsfiddle.net/4A4FY /
Jquery
$("input[data-target='generateInput']").on('click', function (e) {
var targetId = $(this).parent("div").attr("id");
var t = $("div#input_" targetId).append("<input type='text' name='aa' />");
});
HTML
<select id="e1" name='selectTag' multiple>
<option value="ABC" data-id='1' id='1'>ABC</option>
<option value="DEF" data-id='2' id='2'>DEF</option>
<option value="GHI" data-id='3' id='3'>GHI</option>
<option value="JKL" data-id='4' id='4'>JKL</option>
<option value="MNO" data-id='5' id='5'>MNO</option>
</select>
<div id='generate' style='margin:10px;'></div>
Комментарии:
1. Я несколько смущен, что это работает, но какой идентификатор $ (‘div#input_id’) вообще отсутствует в разметке?
2. Где это
div#input_id
? И как вы добавляете его к каждомуdiv#input_id
? Должно быть только одно?3.
div
Вid="input_id"
вашем HTML нет with . Куда его следует добавить?4. Извините, ваше объяснение все еще неясно и открыто для многих интерпретаций.
5. я обновил свой вопрос
Ответ №1:
Вы захотите использовать обработчик событий change
и проверить все входные данные
$('input').on('change', function(){
if($(this).is(':checked') amp;amp; $(this).data('i') == 3){
//do stuff
}
});
Ответ №2:
Вы можете проверить значение выбранного переключателя
$( document ).ready(function() {
$("input[name='radioBtn_4']").on('click', function(e) {
if($(e.currentTarget).val()==="Radio 3") {
var t = $('div#4').append("<input type='text' name='aa' />");
} else{
$("input[name='aa']").remove();
}
});
});
Ответ №3:
Это потому, что вы добавляете обработчик событий для каждого click
. Означает, что ваш код выполняется при каждом нажатии на переключатель. вы должны попытаться привязать обработчик событий для первого щелчка.
Я предлагаю вам использовать .one()
метод Jquery. Он подключает обработчик событий один раз.
Попробуйте .one()
метод jquery.
$("input[data-target='generateInput']").one('click', function(e) {
var targetId= $(this).parent("div").attr("id");
console.log("#input_" targetId);
var t = $("div#input_" targetId).append("<input type='text' name='aa' />");
});