Если вы используете jQuery, просто используйте селектор вместо getElementById()
и используйте append()
для добавления контента к нему.
Кроме того, у вас никогда не должно быть двух предметов с одинаковым идентификатором. Вы можете отсортировать его, добавив свой счетчик famElements
к идентификаторам полей ввода. Поскольку это изменение исключало выбор элементов по идентификатору, я также изменил ваши флажки, чтобы иметь класс cit
, поэтому я могу прикрепить событие с помощью простого селектора.
Для события click вы можете использовать .live()
или .delegate()
, поэтому вам не нужно постоянно связывать события.
function familySize() {
while (famElements < $("#famNum").val()) { // add fields
famElements++;
addFields = '<div class="member"> Name: <input id="name'+famElements+'" type="text" placeholder="Name" required> <input class="cit" id="cit'+famElements+'" type="checkbox" onChange="citizenInfo()" > Non U.S. Citizen?<br/></div> <div class="citInfo" style="display:none"> <input id="countryCitizenship'+famElements+'" type="text" placeholder="Citizenship" required></div>';
$('#famItems').append(addFields);
}
while (famElements > $("#famNum").val()) { // remove fields
console.log("remove one");
$('#famItems div:last').remove();
famElements--;
}
}
// Your jQuery ready function
$(function(){
// Click event on checkboxes
$('#famItems').delegate('.cit','click',function(){
var $this = $(this);
// Show or hide the div
if($this.is(':checked')){
$this.parent().find('.citInfo').hide();
} else {
$this.parent().find('.citInfo').show();
}
});
});
Вы можете создавать свои элементы более элегантно с помощью jQuery, но он делает то, что ему нужно. Хотя вы можете подумать об этом, если вы добавите свой HTML, и этот большой кусок текста станет слишком большой загадкой.