Javascript:重新加载 DIV 后按钮被禁用

标签 javascript html

我有一个带有两个选项卡的表单,在两个选项卡上您都可以编辑数据并提交已经生效的更改。 现在,我希望在更改某些内容(例如图片 URL 和缩略图应该刷新)后重新加载您进行更改的选项卡以查看更改。

我有第二个选项卡的代码

<script>
$(document).ready(function(){
    $('.btn').click(function(){
        var clickBtnValue = $(this).val();
        if(clickBtnValue == 'Save') {
            var ajaxurl = 'ajax.php',
                data = $('form').serialize();
            $.post(ajaxurl, data, function (response) {
                if(response == '')
                {
                    alert("Successfully saved");
                    location.href="catalog.php";
                }
                else               alert(response);
            });
        }
        else if(clickBtnValue == 'Save & Continue Edit')
        {
            var ajaxurl = 'ajax.php',
                data = $('form').serialize();
            $.post(ajaxurl, data, function (response) {
                if(response == '') alert("Successfully saved");
                else               alert(response);
            });
        }
        else if(clickBtnValue == 'Add new Item')
        {
            var ajaxurl = 'ajax.php',
                data = $('#itemform').serialize();
            $.post(ajaxurl, data, function (response) {
                if(response == '')
                {
                    alert("Successfully added new Item");
                    location.href="catalog.php";
                }
                else               alert(response);
            });
        }
        else if(clickBtnValue == 'Save Images')
        {
            var ajaxurl = 'saveimages.php',
                data = $('#imageform').serialize();
            $.post(ajaxurl, data, function (response) {
                if(response == '')
                {
                    alert("Successfully saved");
                    $("#tab_images").load(location.href+" #tab_images>*","");
                }
                else               alert(response);
            });
        }
    });
});

到目前为止一切正常,数据被保存并且 DIV 重新加载,但现在每当我尝试按下按钮时什么也没有发生,即使在第一个选项卡上也是如此。

我做错了什么?

编辑: 我的标签代码:http://i.epvpimg.com/9SaKb.png 由于太长无法在此发布,因此我必须截图。

最佳答案

看起来您尝试单击的按钮位于您正在重新加载的 div 内。当该 div 的内容被替换时,您使用 ajax 获取的所有元素都将被视为新元素 - 这也意味着您之前在这些按钮上的单击处理程序也会丢失 - 因此它们不会以相同的方式使用react :D

尝试将事件绑定(bind)到正在替换的 div 外部的元素上,而不是按钮本身上

$("parent_selector_outside_ajax_div").on("click", ".btn", function() {
   //your button function
});

阅读关于使用 jQuery 进行事件委托(delegate)的文章 http://api.jquery.com/on/

由于您的外部js库绑定(bind)了它自己的按钮,我建议将这些按钮移到您尝试更新的div之外(这不应该是一个大问题,因为您只是为了图像预览而尝试更新?: D)。

另一种选择(我不会这样做)是在 ajax 重新加载后,通过调用库提供的任何函数来初始化自身,再次重新绑定(bind)这些按钮。 如果您的应用程序生命周期很长,您还应该在用新内容替换旧内容之前,从当前内容中删除所有事件处理程序,以避免某些浏览器中可能出现内存泄漏(不确定您的目标受众是什么) ).

关于Javascript:重新加载 DIV 后按钮被禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26274804/

相关文章:

javascript - 如何在 JavaScript 中动态更改 jQuery dataTable 页码?

javascript - fs.FileRead -> TypeError [ERR_INVALID_ARG_TYPE] : The "path" argument must be one of type string, 缓冲区或 URL。接收类型未定义

javascript - 每次流结束时都会延迟随机时间的 Observable

javascript - 将事件对象和其他参数传递给 JavaScript 函数

html - CSS背景图片?

javascript - 元素等高

html - 在 CSS 中修复 HTML 表单

javascript - 我正在 React 创建一个聊天机器人我需要它的一些特定回复而不是单个关键字匹配

javascript - laravel中将数组传递给ajax请求时出现问题

html - 居中背景 :url image with :after pseudo element in CSS