Jquery UI对话框不会消失

时间:2012-09-09 15:36:48

标签: javascript jquery html jquery-ui jsp

我正在使用jquery-ui标签和对话框功能。

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

我是用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页面中。 我假设当我在标签之间切换时,旧按钮将被垃圾收集。

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

1 个答案:

答案 0 :(得分:2)

您无需从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
});

这样,您只能绑定一个点击处理程序,该处理程序会侦听从click冒出的任何.addButton,然后搜索其兄弟.addFormDialog。 (我希望我听起来不会太混乱)