附加了JQuery的代码不会在输入文件上触发click事件

时间:2016-01-21 01:02:57

标签: javascript jquery html mouseclick-event

我附加了一小段代码,其中包含一个图像,当点击该图像时会触发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主标记内正确附加。可能有什么不对?

1 个答案:

答案 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>