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

标签 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)更改是/否按钮的操作?

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

最佳答案

经典且简单的方法是创建一个新对话框而不是重用旧对话框。既然您在问题中没有这样做,我假设您出于某种原因不想这样做;因此,您可以使用 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');
}

还要考虑将 OpenCustomDialog 中的 titlecallback 参数绑定(bind)为按钮上的数据属性将使处理程序看起来更干净

关于javascript - 如何为同一 jquery 对话框的不同实例调用不同的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35150617/

相关文章:

Javascript Replace() 使用 html 实体

javascript - 在页面上加载高级 jQuery 版本

javascript - 一种附加事件监听器的方法,所有主流浏览器都支持

javascript - 每半秒刷新页面 5 次,然后使用 javascript 或 JQuery 将查询字符串附加到 url

javascript - jQuery slider 未知

javascript - Jquery JScrollPane - 设置滚动速度/灵敏度

javascript - CSS3 转换不起作用

javascript - 将 overflow-y 设置为滚动(jQuery),水平自动滚动 div 到最后

jquery - 在 MousePosition 中打开 JQuery Ui 对话框

当我们移动到下一个选项卡时,jquery ui 选项卡需要清空上一个选项卡