Благодаря этому вопросу я узнал, как я могу динамически создавать элементы HTML на основе выбранного пользователем параметра.
Теперь, когда пользователи выбирают вариант, скажем, 5, создаются и отображаются пять групп полей ввода.
Для каждой группы полей ввода существует кнопка загрузки файлов для изображений.
У меня есть функция javascript, которая обнаруживает, когда пользователи загружают изображение, а затем отображает миниатюру этого изображения.
Проблема в том, что мне нужно получить доступ к идентификатору каждого <input type="file" id="appraisal_image1">
Я мог бы, конечно, создать несколько определений функций, каждый с разными идентификаторами, а затем вызвать каждую из этих функций, но мне было интересно, выполнил ли это это без копирования и вставки большого количества кода.
Вместо использования ids используйте классы и используйте делегирование событий для регистрации обработчика изменений
В приведенном ниже примере добавляются дополнительные классы appraisal_image
к элементу управления входными файлами, где при добавлении класса thumbnail_image
в элемент изображения
Пытаться
// Show Thumbnail
function getThumbnail (input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$(input).closest('.image-ct').find('.thumbnail_image').attr('src', e.target.result).show();
}
reader.readAsDataURL(input.files[0]);
}
}
$('#Number').change(function() {
var num = parseInt($(this).val(), 10);
var container = $('<div />');
for(var i = 1; i <= num; i++) {
container.append('<div class="image-ct ' + i + '"><div class="row"><div class="col-md-6 col-md-offset-3 bottom-15"><label for="file" class="text-center" id="imageNumber' + i + '">Upload Image:</label><input class="light-gray center appraisal_image" type="file" name="appraisal_image' + i + '" id="appraisal_image' + i + '"><br><div class="image-holder"><img class="hide-till-uploaded center thumbnail_image" id="thumbnail_image' + i + '" src="#" alt="your image" /></div></div></div><div class="row"><div class="col-md-2 col-md-offset-5 bottom-15"><label for="Size" id="Size' + i + '">Size</label><input type="text" class="form-control" name="Size' + i + '" placeholder="Rug Size" id="Size' + i + '"></div></div></div>');
}
$('#here').empty().append(container);
});
$('#here').on('change', '.appraisal_image', function(){
getThumbnail(this);
})
Демо: скрипка
Вы можете использовать этот код для получения всех идентификаторов типа ввода, которые существуют в вашей форме
[].forEach.call(document.querySelectorAll("input[type='text']"),
function (input) {
var value = input.value;
var id = input.id;
alert(id);
});
Используйте классы вместо ids, а затем вы можете использовать jQuery on
делегата:
$(".appraisal_image") // get all elements with this class
.on("change", function(){
getThumbnail1(this);
$(this).css("display", "block");
});
on
добавит события к элементам, которые еще не существуют. Это означает, что элементам, которые динамически добавляются, автоматически присваивается событие