表单成功后,ajax部分重新加载页面后表单/按钮停止工作

时间:2016-12-23 13:41:13

标签: javascript php ajax forms

(如果我的英语不好,我来自pewdiepieland) 我有一个让我感到痛苦的问题。

我有一个带图片库的页面。登录后,每张图片都会有一个表格,您可以在其中更改说明或删除图片。我还有一个表单,您可以在其中添加新图片。

如果我添加图片或删除/编辑现有图片,则会显示重新加载所有图片的页面部分,以便加载新内容。 (因为我不希望整个页面重新加载,并且还希望显示发生了什么的消息,例如。"图片已成功上传/更改/删除")。

问题是重新加载的部件内部的表单停止工作。如果我想删除或编辑其他图像,我需要重新加载整个页面。 (提交新图片的表单仍然有效,因为它在页面的重新加载部分之外")

我是否需要重新加载javascript文件或其他任何内容,或者我需要做什么?

你们需要检查代码的某些部分吗?感觉我需要在我的代码中添加一些东西来防止这种情况而不是改变现有代码......但是嘿我知道什么......

祝福和圣诞快乐!

  
    

更新<<使用简单代码:

  

HTML / PHP

<form id="addimg" role="form" method="POST" enctype="multipart/form-data">
    <input type="file" name="img">
    <input type="text" name="imgtxt">
    <input type="submit" name="gallery-submit" value="Add Image">
</form>

<div id="gallery_content">
    <?php
    $result = mysqli_query($link, "SELECT * FROM gallery");
    $count = 1;

    while($row = mysqli_fetch_array($result)) {
        $filename  = $row['filename'];
        $imgtxt    = $row['imgtxt'];
        $id        = $row['id'];

        echo '<div>';
        echo    '<img src="gallery/' . $filename . '">';
        echo    '<form id="editimg' . $count . '" role="form" method="POST">';
        echo        '<input type="text" name="imgtxt">';
        echo        '<input type="hidden" name="id">';
        echo        '<input type="submit" name="changeimgtxt" data-number="' . $count . '" value="Update" class="edit_img">';
        echo    '</form>';
        echo    '<button class="delete_img" value="' . $id . '">Delete</button>';
        echo '</div>;
    }
    ?>
</div>

JAVASCRIPT / JQUERY

$(document).ready(function() {
    $('#addimg').submit(function(e) {
        e.preventDefault();

        gallery('add', '');
    });

    $('.edit_img').click(function(e) {
        e.precentDefault();
        var formNr = $(this).data('number');

        var dataString = $('#editimg' + formNr).serialize();
        gallery('edit', dataString)
    });

    $('.delete_img').click(function(e) {
        e.preventDefault();
        var imgid = $('this').value();

        gallery('delete', imgid);
    });

    function gallery(a, b) {
        if (a == 'add') {
            var dataString = new FormData($('#addimg')[0]);

            $.ajax({
                type: "POST",
                url: "gallery_process.php",
                data: dataString,
                success: function(text){
                    if(text == 'add_success') {
                        - Show success message -
                        $('#gallery_content').load(document.URL + ' #gallery_content');
                    } else {
                        - Show fail message -
                    }
                },
                cache: false,
                contentType: false,
                processData: false
            });

        } else if (a == 'edit') {
            var dataString = b;

            $.ajax({
                type: "POST",
                url: "gallery_process.php",
                data: dataString,
                success: function(text){
                    if(text == 'edit_success') {
                        - Show success message -
                        $('#gallery_content').load(document.URL + ' #gallery_content');
                    } else {
                        - Show fail message -
                    }
                }
            });
        } else if (a == 'delete') {
            var dataString = 'imgid=' + b;

            $.ajax({
                type: "POST",
                url: "gallery_process.php",
                data: dataString,
                success: function(text){
                    if(text == 'delete_success') {
                        - Show success message -
                        $('#gallery_content').load(document.URL + ' #gallery_content');
                    } else {
                        - Show fail message -
                    }
                }
            });
        } 
    }
});

我认为您不需要查看我的流程文件。有线索吗?

2 个答案:

答案 0 :(得分:0)

您的问题可能是添加和删除图片的.click功能,因此请将其更改为$('body').on('click', 'delete_img', function() {// do something});

See Here

答案 1 :(得分:0)

您的问题是,您只需将.click()个侦听器连接起来,然后准备就绪&#34;。

当执行$(document).ready()回调时,库已经被填充,并且您在当前位于DOM中的元素上连接了单击侦听器。当您重新加载库时,它不再是相同的DOM元素,并且没有在这些元素上设置任何点击侦听器。您可以通过多种方式更正此问题,例如,jQuery .load()采用complete回调,您可以在其中设置事件侦听器。您的样本适应:

$(document).ready(function() {
    var setupGalleryEventListeners = function () {
        $('.edit_img').click(function(e) {
            e.preventDefault();
            var formNr = $(this).data('number');

            var dataString = $('#editimg' + formNr).serialize();
            gallery('edit', dataString)
        });

        $('.delete_img').click(function(e) {
            e.preventDefault();
            var imgid = $('this').value();

            gallery('delete', imgid);
        });
    };

    $('#addimg').submit(function(e) {
        e.preventDefault();

        gallery('add', '');
    });

    setupGalleryEventListeners(); // Setup initial event listeners on page load

    function gallery(a, b) {
        if (a == 'add') {
            var dataString = new FormData($('#addimg')[0]);

            $.ajax({
                type: "POST",
                url: "gallery_process.php",
                data: dataString,
                success: function(text){
                    if(text == 'add_success') {
                        - Show success message -
                        $('#gallery_content').load(document.URL + ' #gallery_content', setupGalleryEventListeners); // setupGalleryEventListeners called when load is done
                    } else {
                        - Show fail message -
                    }
                },
                cache: false,
                contentType: false,
                processData: false
            });

        } else if (a == 'edit') {
            var dataString = b;

            $.ajax({
                type: "POST",
                url: "gallery_process.php",
                data: dataString,
                success: function(text){
                    if(text == 'edit_success') {
                        - Show success message -
                        $('#gallery_content').load(document.URL + ' #gallery_content', setupGalleryEventListeners); // setupGalleryEventListeners called when load is done
                    } else {
                        - Show fail message -
                    }
                }
            });
        } else if (a == 'delete') {
            var dataString = 'imgid=' + b;

            $.ajax({
                type: "POST",
                url: "gallery_process.php",
                data: dataString,
                success: function(text){
                    if(text == 'delete_success') {
                        - Show success message -
                        $('#gallery_content').load(document.URL + ' #gallery_content', setupGalleryEventListeners); // setupGalleryEventListeners called when load is done
                    } else {
                        - Show fail message -
                    }
                }
            });
        } 
    }
});