1

当我关闭 jQuery UI 对话框时,我正在尝试执行特定操作。这是我的代码的简化版本:

$('a.open-trigger').click(function(){
    var test = 'hello';

    $('#dialog').dialog({
        bgiframe: true,
        dialogClass: 'change', 
        resizable: false,
        draggable: false,
        modal: true,
        height: 334, 
        width: 450,
        autoOpen: false,
        show: 'fade'
    });

    $('#dialog').dialog('open');

    $('a.close-trigger').click(function(){
        alert(test);
        $('#dialog').dialog('close');
    });
});

第一次关闭对话框时,我会收到带有“hello”一词的预期警报。如果我再次打开对话框并关闭它,我会收到两次“hello”警报。如果我第三次打开和关闭它,我会收到三个警报,依此类推。

为什么这些警报会自我复制?我希望警报只在关闭时显示一次,无论我打开/关闭对话框多少次。

谢谢!西蒙

4

3 回答 3

8

每次调用时都会附加额外的事件处理程序.click。这就是它重复的原因。

$('a.close-trigger').click(function(){
                    alert(test);
                    $('#dialog').dialog('close');
            });

将该代码拉出到与其他事件绑定相同的级别,它应该可以按预期工作。

于 2009-05-14T21:50:05.880 回答
0

您已将一个函数绑定到打开按钮,该函数会在每次触发打开事件时将事件处理程序添加到关闭按钮。您应该在“a.open-trigger”事件函数之外的某个地方添加关闭事件处理程序...

$('a.open-trigger').click(function(){
        var test = 'hello';

        $('#dialog').dialog({bgiframe: true, dialogClass: 'change', resizable: false, draggable: false, modal: true, height: 334, width: 450, autoOpen: false, show: 'fade'});
        $('#dialog').dialog('open');
});

$('a.close-trigger').click(function(){
        alert(test);
        $('#dialog').dialog('close');
});
于 2009-05-14T21:55:35.040 回答
0

您需要将关闭单击事件处理程序从打开单击事件处理程序中取出

$(function() {
    $('#dialog').dialog({bgiframe: true, dialogClass: 'change', resizable: false, draggable: false, modal: true, height: 334, width: 450, autoOpen: false, show: 'fade'});

    $('a.open-trigger').click(function(){    
        $('#dialog').dialog('open');
    });


    $('a.close-trigger').click(function(){
        alert("hello");
        var myDialog = $('#dialog');
        if (myDialog.dialog('isOpen'))
            myDialog.dialog('close');
    });
});
于 2009-05-14T21:55:57.053 回答