我有一個畫廊,在頁面中點擊加號和減號來添加和刪除畫廊項目,然後添加文件添加到新添加的項目的輸入。我如何獲得jQuery的.each函數動態元素的.on('更改')功能
我已經創建了一個文件讀取器來獲取文件的url,但它只能在該頁面上的第一個元素上工作,在這之後添加的任何內容都不會受到影響。
這裏是我的JS:
$('#gallery .gallery-item .file_upload').each(function() {
var $this = $(this);
//$('body').on('click', 'input', function() {
$this.on('change', 'input', function(evt){
var files = evt.target.files;
var file = files[0];
console.log(files[0]);
var reader = new FileReader();
reader.onload = (function(file) {
return function(e) {
console.log(e.target.result);
};
})(file);
reader.readAsDataURL(file);
});
});
追加畫廊項功能:
$('#gallery')
.on('cocoon:before-insert', function(e,image_field) {
image_field.insertAfter($(this).next());
})
.on('cocoon:after-remove', function(e, image_field) {
$(this).data('remove-timeout', 1000);
image_field.fadeOut('slow');
});
$('.gallery-item').each(function() {
$(this).next('a.add_fields').appendTo(this);
$(this).next('input').appendTo(this);
});
HTML:
<div class="image-field">
<div class="file_upload">
<input class="image_file" id="gallery_files" name="book[gallery_attributes][images_attributes][1412768497650][file]" type="file">
</div>
</div>
誰能告訴我爲什麼。每個功能將無法正常工作這個.on函數用於附加的新項目。我認爲這是最重要的功能,顯然不適用於這裏,而不是下面的其他功能。
工作是的,它是委託的順序,所以它從父div的id開始,而.on基本上貫穿'.gallery-item .file_upload input'中的每個子節點,然後運行'.on( '變化')'。很感謝Anthony的解釋。 :) – 2014-10-08 12:08:30