我附加了一小段代码,其中包含一个图像,当点击该图像时会触发click
上的input
事件进行文件上传。加载和/或刷新页面时,只有一个块一旦更改,就会触发事件以附加新的。
<div class="add_new_image">
<div class="img">
<div class="file-upload-trigger">
<input type="file" name="imagem[]" class="none file-chooser" required/>
<img class="more" src="/assets/auto/images/add_image.png"/>
</div>
</div>
</div>
用于追加的JQuery代码:
$('#novo_anuncio .file-chooser').change(function() {
readURL(this);
$('#novo_anuncio .add_new_image').append(
'<div class="img">\n\
<div class="file-upload-trigger">\n\
<input type="file" name="imagem[]" class="none file-chooser" required/>\n\
<img class="more" src="/assets/auto/images/add_image.png"/>\n\
</div>\n\
</div>');
});
问题是附加的代码不会触发click
上的input
事件。代码相同,并且在.add_new_image
主标记内正确附加。可能有什么不对?
答案 0 :(得分:1)
您需要使用.on()
,因为当您绑定“更改”侦听器时,您的新“.file-chooser”不存在。 jQuery on处理所有这些。
委派事件的优势在于它们可以处理来自的事件 稍后添加到文档中的后代元素。
$('body').on('change', '#novo_anuncio .file-chooser', function() {
readURL(this);
$('#novo_anuncio .add_new_image').append(
'<div class="img">\n\
<div class="file-upload-trigger">\n\
<input type="file" name="imagem[]" class="none file-chooser" required/>\n\
<img class="more" src="/assets/auto/images/add_image.png"/>\n\
</div>\n\
</div>');
});
$('body').on('change', '#novo_anuncio .file-chooser', function() {
alert("change");
$('#novo_anuncio .add_new_image').append(
'<div class="img">\n\
<div class="file-upload-trigger">\n\
<input type="file" name="imagem[]" class="none file-chooser" required/>\n\
<img class="more" src="/assets/auto/images/add_image.png"/>\n\
</div>\n\
</div>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="novo_anuncio">
<div class="add_new_image">
<div class="img">
<div class="file-upload-trigger">
<input type="file" name="imagem[]" class="none file-chooser" required/>
<img class="more" src="/assets/auto/images/add_image.png"/>
</div>
</div>
</div>
</div>