如何为同一jquery对话框的不同实例调用不同的操作?

时间:2016-02-02 10:17:08

标签: javascript jquery jquery-ui

我只是掌握了jquery-ui和对话功能。我有这样的基础知识:

$("#jquery-confirm").dialog({
  dialogClass: "jQdialog",
  autoOpen : false,
  modal: true,
  buttons: {
    Yes: function() {
      $(this).dialog('close');
      // do something for yes;
    },
    No : function() {
      $(this).dialog('close');
      // do something for no;
    }
  }
});

然后我可以调出对话框:

$("#button1").click(function() {
    OpenCustomDialog("Title 1");
});

function OpenCustomDialog(title) {
  $("#jquery-confirm").dialog("option", "title", title);
  $("#jquery-confirm").dialog('open');
} 

这没关系,但现在我想使用相同的对话框,但指定附加到是/否按钮的不同操作:

$("#button2").click(function() {
    OpenCustomDialog("Title 2");
});

如何更改“是/否”按钮的操作,具体取决于调用对话框的HTML元素(button1 / button2)?

我最好的猜测是回调函数和/或闭包,但我无法理解它。

1 个答案:

答案 0 :(得分:0)

经典而简单的方法是创建一个新对话框,而不是重用旧对话框。既然你没有在问题中这样做,我会假设你不想出于任何原因这样做;所以,您可以使用data属性:

var callbacks = {
    yes: {
        b1: function() { /*do something*/ }
        b2: function() { /*do something*/ }
    },
    no: {
        b1: function() { /*do something else*/ }
        b2: function() { /*do something else*/ }
    }
};

// ... etc.

  buttons: {
    Yes: function() {
      $(this).dialog('close');
      callbacks.yes[$(this).data("callback-target")]();
    },
    No : function() {
      $(this).dialog('close');
      callbacks.no[$(this).data("callback-target")]();
    }
  }

// .. etc.

$("#button1").click(function() {
    OpenCustomDialog("Title 1", "b1");
});

function OpenCustomDialog(title, callback) {
  $("#jquery-confirm").dialog("option", "title", title);
  $("#jquery-confirm").data("callback-target", callback);
  $("#jquery-confirm").dialog('open');
}

同时考虑将title中的callbackOpenCustomDialog参数绑定为按钮上的数据属性将使处理程序看起来更清晰