javascript - CSS 和 JQuery 在 Ajax 调用后不起作用

标签 javascript jquery css ajax

我的借口:首先,我想解释一下,我一直在寻找答案。我发现了很多类似的问题,但没有一个能解决我的问题。

问题:在 Ajax 调用之后,我动态地添加了 HTML 代码,添加的代码失去了它的样式和操作响应(例如,在单击时)。

HTML :随页面加载加载的 HTML。它正确地呈现了用户图像的集合。我的意思是...样式没问题,JS 函数绑定(bind)到类“visualizaImagem”和“deletaImagem”工作正常。

<div class="row">
    <div class="col-sm-12" id='imagens'>
        <?php 
        if(isset($imagens)){

            if(count($imagens) > 0){

                foreach($imagens as $imagem){

                    echo "
                    <div class='file-box' data-path='" . $imagem['path'] . "' id='" . $imagem['nome'] . "'>
                        <div class='file'>
                            <a class='visualizaImagem' data-path='". $imagem['path'] ."'>
                                <div class='icon'>
                                    <img src='../" . $imagem['path'] . "' style='height:100%'>
                                    <a class='deletaImagem' data-path='". $imagem['path'] ."' data-divid='" . $imagem['nome'] . "'>
                                        <i class='fa fa-trash' style='position:absolute;top:10px;left:10px;font-size:18px;'></i>
                                    </a>
                                </div>
                                <div class='file-name'> " . $imagem['nome'] . "</div>
                            </a>
                        </div>
                    </div>";
                }
            }
        }
        ?>
    </div>
</div>

JS:当我点击上传按钮(不是此代码的一部分)时,图像数据通过“data: dados”传递,由特定 Controller 中的“salvaImagem”读取,然后附加到页面。该图像实际上是附加的,但没有 css 样式,也没有响应本应绑定(bind)到上述相同类的函数。

jQuery.ajax({
        type: "POST",
        url: "salvaImagem",
        data: dados,
        dataType: "json"}).done(function(response)
        {
            if(response.sucesso){

                toastr['success'](response.msg);

                var img = "" +
                        "<div class='file-box' id='" + response.nome + "' data-path='" + response.path + "'>" +
                        "   <div class='file'>" +
                        "       <a class='visualizaImagem' data-path='"+response.path+"'>" +
                        "           <div class='icon'>" +
                        "               <img src='../"+response.path+"' style='height:100%'>" +
                        "               <a class='deletaImagem' data-path='"+response.path+"' data-divid='"+response.nome+"'>" +
                        "                   <i class='fa fa-trash' style='position:absolute;top:10px;left:10px;font-size:18px;'>" +
                        "               </a>" +
                        "           </div>" +
                        "           <div class='file-name'> "+response.nome+"</div>" +
                        "       </a>" +
                        "   </div>" +
                        "</div>";

                $('#imagens').append(img);
            }
            else{
                toastr['error'](response.msg);
            }
        });

我想我应该多介绍一下代码。这是我如何将函数绑定(bind)到这些类的示例。实际上,当我在绑定(bind)中编写函数时,我预计不需要重新绑定(bind)。

$('.deletaImagem').on('click', function (){
    var path = $(this).data('path');
    var div_id = $(this).data('divid');

    jQuery.ajax({
        type: "POST",
        url: "deletaImagem",
        data: {'path':path},
        dataType: "json"}).done(function(response)
        {
            if(response.sucesso){

                toastr['success'](response.msg);
                $('#'+div_id).remove();                 
            }
            else{
                toastr['error'](response.msg);
            }
        });
    return false;
});

尝试使用 friend 在这里给我的一些提示,我尝试了以下方法,但也没有成功。

jQuery.ajax({
        type: "POST",
        url: "salvaImagem",
        data: dados,
        dataType: "json"}).done(function(response)
        {
            if(response.sucesso){

                toastr['success'](response.msg);

                var img = <HTML original code here>

                $(img).appendTo('#imagens').find('.deletaImagem').on('click', deletaImagem);
                $('.visualizaImagem').on('click', visualizaImagem);
            }
            else{
                toastr['error'](response.msg);
            }
        });

 function deletaImagem(){
    var path = $(this).data('path');
    var div_id = $(this).data('divid');

    jQuery.ajax({
        type: "POST",
        url: "deletaImagem",
        data: {'path':path},
        dataType: "json"}).done(function(response)
        {
            if(response.sucesso){

                $('#'+div_id).remove(); 
                toastr['success'](response.msg);
            }
            else{
                toastr['error'](response.msg);
            }
        });
    return false;
}

最佳答案

因为我假设您在 document.ready 上绑定(bind)事件(点击等...),所以以后添加的任何新元素都不会有这些事件。

添加新元素后,只需再次添加事件即可。

$('#something').append("<div class='somethingWithClicklistener'>a</div>"); // It won't have the event, you have to add it
$('.somethingWithClicklistener').click(function(){ etc..

虽然这种方法可能会使预先存在的类的事件处理程序加倍,但您明白了这一点

至于样式,除非你使用 jquery 动画等,否则它不应该发生......

关于javascript - CSS 和 JQuery 在 Ajax 调用后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37644761/

相关文章:

javascript - Jquery easyTicker 无法正常工作

javascript - 在最后定位 flex box

html - 模板站点未正确导入字体和图标

javascript - 将第三方 javascript 文件合并到 webpack 包中?

javascript - 悬停 CSS HTML 文本后面的图像

javascript - 展平阵列有哪些实际应用?

jquery - 使用 jQuery UI 可拖动并启用捕捉功能检索 "snapped to"元素

JavaScript 模块模式函数或 jQuery 委托(delegate)

javascript - Sticky-kit元素跳跃

css - With 不是以下 :after affecting the next element? 的边距