Jquery UI对话框不会消失

Jquery UI dialog does not disappear

本文关键字:消失 对话框 UI Jquery      更新时间:2023-09-26

我使用的是jquery ui选项卡和对话框功能。

每个选项卡在页面上都有一个按钮,用于打开一个对话框。这适用于其中一个选项卡。但是,如果我转到第二个选项卡,按钮在那里不起作用。当我回到第一个选项卡时,对话框确实出现了,但问题是我注意到,当我来回切换到第一个选项卡的时候,它会不断插入新的div,而旧的div会显示:没有设置。

我使用JSP来完成这项工作。这就是可重用jsp的样子:

<script>
$(function() {
    var formData = null;
    $.ajax({
        url : "addFormGenerator.html",
        success : function(data) {
            formData = data;
            $("#addFormDialog").html(data);
            $("#addFormDialog").dialog({
                autoOpen : false,
                height : 300,
                width : 350,
                modal : true,
                buttons : {
                    "Add" : function() {
                        $(this).dialog("close");
                    },
                    Cancel : function() {
                        $(this).dialog("close");
                    }
                },
                close : function() {
                }
            });
        }
    });
    $("#addButton").button().click(function() {
        $("#addFormDialog").html(formData);
        $("#addFormDialog").dialog("open");
    });
});
</script>
<button id="addButton">Click here to Add New</button>
<div id="addFormDialog" title="Add New"></div>

这个jsp片段也包含在其他jsp页面中。我假设当我在选项卡之间切换时,旧按钮将被垃圾回收。

你能帮我理解问题并解决它吗?

您不需要从jsp的响应中呈现以下部分

<div class="addFormDialog" title="Add New"></div>
$("#addButton").button().click(function() {
        $("#addFormDialog").html(formData);
        $("#addFormDialog").dialog("open");
});

只要有以下内容,最好有类名,不要重复id的

<button class="addButton">Click here to Add New</button>

更新

我仍然不认为你需要唯一的id-

<div id="tabs-container">
    <!-- tabs here -- >
    <-- let's say this is tab#1 -->
       <button class="addButton">Click here to Add New</button>
       <div class="addFormDialog" title="Add New"></div>
    <!-- tab1 -->
</div>

$('#tabs-container').on('click' , '.addButton', function(){
    var dialogContent = $(this).siblings('.addFormDialog');
    //now call .dialog({..});  or whatever you need
});

通过这种方式,您只绑定了一个单击处理程序,该处理程序侦听从.addButton弹出的任何click,然后搜索其同级.addFormDialog。(我希望我听起来不太困惑)