Javascript jqueryui对话框+;Jquery在取消时重复其功能

Javascript jqueryui对话框+;Jquery在取消时重复其功能,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,请在这方面帮助我 Q1:当我点击Cancel按钮时,所有函数似乎都在重复调用自己,我只在IE中遇到过这种情况 我的HTML <button class="btnCaller">diag caller 1</button> <button type="button" class="btnCaller">diag caller 2</button > <table id="diagMenu" style="display:none">

请在这方面帮助我
Q1:当我点击Cancel按钮时,所有函数似乎都在重复调用自己,我只在IE中遇到过这种情况

我的HTML

<button class="btnCaller">diag caller 1</button>
<button type="button" class="btnCaller">diag caller 2</button >

<table id="diagMenu" style="display:none">
    <tr><td>
        <input id="anyField"></input>
        <button id="cmdInsertNewProject">Ok</button >
        <button id="cmdCancelNewProject">Cancel</button >
        </td></tr>  

</table>
我把这个放在我的口袋里 改变

.live('click',

我想这会解决你的问题

编辑:


根据,似乎不推荐使用.live()命令。尝试改用.on()。

如何注册事件处理程序存在问题。单击事件处理程序只应添加一次,因此可以在
ready()
方法中完成

此外,在
fnAddNewProject()
中执行的任何操作都应该只执行一次,而不是每次单击
都执行一次,这样您就可以将函数调用移动到
ready()


您可以看到它正在工作。

因此,正如已经指出的,您在对话框中注册处理程序的方式导致每次事件发生时都重新注册它。因此,您会反复看到弹出窗口(因为每次都有新的注册)

这样,您就可以利用jQueryUI的对话框按钮属性将按钮(以及相应的函数)附加到对话框中,而不必担心所有这些事件注册。我没有完成它,但我(你会注意到,它要简单得多)。请注意作为对话框一部分的“按钮”属性

$('#diagMenu').dialog({
    autoOpen: false,
    width: 650,
    maxHeight: 1000,
    maxWidth: 600,
    modal: true,
    resizable: false,
    title: "Insert New Project",
    position: "center",
    buttons: {
        "OK": function() {
            InsertNewProject();
            $(this).dialog("close");
        },
        "Cancel": function() {
            $(this).dialog('close');
        }
    },
    Cancel: function() {
        $(this).dialog("close");
    }
});

my web app中的table Diag菜单将被重新打印,因此cmdInsertNewProject和cmdCancelNewProject是“实时”的,而不是使用“实时”-使用“打开”。谢谢大家,我最初的想法是,每次我给fnAddNewProject打电话时,它都会“重置”所有事件。。但是它却在堆叠事件…感谢coder543,因为diagMenu需要在其Div中重新打印,所以我需要它的按钮是LiveYou在每次创建对话框时调用.live()命令,这会导致事件堆叠。要么需要在$(document).ready()中调用它,要么需要在.click()中调用它。会是哪一个?
.click(
$('#diagMenu').dialog({
    autoOpen: false,
    width: 650,
    maxHeight: 1000,
    maxWidth: 600,
    modal: true,
    resizable: false,
    title: "Insert New Project",
    position: "center",
    buttons: {
        "OK": function() {
            InsertNewProject();
            $(this).dialog("close");
        },
        "Cancel": function() {
            $(this).dialog('close');
        }
    },
    Cancel: function() {
        $(this).dialog("close");
    }
});