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



(如果我的英语不好,我来自pewdiepieland)我有一个问题,让我震惊。

我有一个带有图片库的页面。登录每张图片时,您可以在其中更改描述或删除图片。我也有一个表格,您可以在画廊中添加新图片。

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

问题在于,零件内部的形式被重新加载停止工作。如果要删除或编辑另一个图像,我需要重新加载整个页面。(提交新图片的表格仍然有效,因为它不在页面的"重新加载"部分")

"

我必须重新加载JavaScriptFile或其他任何事情,还是我需要做什么?

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

最好的祝愿和圣诞快乐!

更新<<使用简单的代码:

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 -
                    }
                }
            });
        } 
    }
});

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

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

请参阅此处

您的问题是,您仅在"文档准备就绪"上连接.click()听众。

执行$(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 -
                    }
                }
            });
        } 
    }
});

最新更新