Javascript JQuery对话框-仅在单击“时执行代码”;X";按钮

Javascript JQuery对话框-仅在单击“时执行代码”;X";按钮,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我有一个带有两个按钮的对话框(是/否)。每一个都触发一个函数 $('#divDialog').dialog({ modal:true, width:450, resizable: false, buttons: [{ text: 'Yes', click: function () { /*Do stuff when clicking yes*/ }},{

我有一个带有两个按钮的对话框(是/否)。每一个都触发一个函数

$('#divDialog').dialog({
    modal:true,
    width:450,
    resizable: false,          
    buttons: [{
        text: 'Yes',
        click: function () {
            /*Do stuff when clicking yes*/
        }},{
            text: 'No',                
            click: function () {
                /*Do stuff when clicking no*/
            }}],
    close: function(ev, ui){
        /*Do stuff always when closing*/                 
    }
});
我想做的是,当您单击顶部的“X”按钮时,执行与“否”按钮中相同的代码。所以我把代码放在“close”函数中。但是,当单击“是”时,代码也会执行

我如何在单击“X”时执行该代码,而不是在单击“是”时执行该代码


谢谢。

定义一个函数,并在用户单击“是”或关闭对话框时调用它

 $('#divDialog').dialog({
          modal:true,
          width:450,
          resizable: false,          
          buttons: [{
                text: 'Yes',
                click: function () {
                    /*Do stuff when clicking yes*/
                    do_work();
                }},{
                text: 'No',                
                click: function () {
                    /*Do stuff when clicking no*/
          }}],
          close: function(ev, ui){
                     /*Do stuff always when closing*/                 
                    do_work();
                }
       });

function do_work() {
    ....
}

您可以通过在jQueryUI init之外的函数上声明来实现这一点:

var onClick = function(ev, ui) {
    console.log(ev);
    if(ev.type == "click") {
        this.isYes = (ev.originalEvent.currentTarget.textContent == "Yes")
        $(this).dialog('close');
    } else {
        if(this.isYes){
            alert("Yes");
        } else {
            alert("No");
        }
    }
}

$('#divDialog').dialog({
    modal:true,
    width:450,
    resizable: false,          
    buttons: [{
        text: 'Yes',
        click: onClick
    },{
        text: 'No',                
        click: onClick
    }],
    close: onClick
});

您只需定义一个函数并在需要时调用它,如下所示

演示@


不要将不希望在某个事件上执行的代码放在该事件回调中。只需以不同的方式将其分解。只需让按钮返回
true
false
并将其作为另一个函数中的参数。就我个人而言,我会将
do_-work()
method declaration放在外部,然后执行
关闭:do_-work
将变量传递给do_-work(showAlert)不起作用,do#u work()中的变量未定义问题是,我需要在单击yes和no时关闭对话框,因此我需要使用$('#divDialog')完成onYes和onNo。dialog('close')。不管你点击什么,关闭功能都会被执行。是的,我的场景有点不同,但这让我走上了正确的轨道,谢谢!
function myFunction() {
    alert ("I am clicked");
}

$('#divDialog').dialog({
    modal:true,
    width:450,
    resizable: false,          
    buttons: [{
        text: 'Yes',
        click: function() {}
    }, {
        text: 'No',                
        click: myFunction
    }],
    close: myFunction
});