I have a field into which a user can type a number. Depending on the number the user inputs, a number of additional input fields are presented via appending additional HTML to a subsequent div.
It works generally well, putting in "1" results in 1 field being added, however some numbers seem not to work: 1 = 1 field 2 = 2 fields 3 = 2 fields () 4 = 3 fields 5 = 3 fields () 6 = 4 fields
It's like certain numbers don't register, and for each one that doesn't subsequent numbers are n fields less than they should be, where n is the number of smaller numbers before that point which have not registered.
However putting in 7 sometimes then jumps it to a total correct value of 7 fields, ... I can't see pattern.
HTML
The input field to specify number of fields to be appended:
<div class="number_input">
<input id="element_207" type="number" value="" name="q_207" />
</div>'
<div id="survey_details"></div>
The jQuery function designed to fire on blur or keyup or change of the above field, and add in the input HTML X number of times
$(function() {
var input = $('HTML TO BE APPENDED GOES HERE');
var newFields = $('');
$('#element_207').bind('blur keyup change', function() {
var n = this.value || 0;
if (n+1) {
if (n > newFields.length) {
addFields(n);
} else {
removeFields(n);
}
}
});
function addFields(n) {
for (i = newFields.length; i < n; i++) {
var newInput = input.clone();
newFields = newFields.add(newInput);
newInput.appendTo('#survey_details');
}
}
function removeFields(n) {
var removeField = newFields.slice(n).remove();
newFields = newFields.not(removeField);
}
});
Your code works fine with a
However if you have multiple elements in your input, like
Both element are counted, so your length will return 2 if you have added it only once. Have all elements in one single
<div>
and it wil workhttp://jsfiddle.net/ZPUfy/