jquery如何获取已打开对话框的按钮

时间:2010-07-20 17:10:37

标签: javascript jquery jquery-ui dialog

我有一个由许多按钮打开的对话框。我怎么知道哪个按钮打开了那个对话框?

$('#dialog').dialog({
  autoOpen: false,
  buttons: {
    "Ok": function() { 
      $(this).dialog("close");
    }, 
    "Cancel": function() { 
      $(this).dialog("close");
    } 
  },
  open: function(event, ui) {
    //HERE ::: how to get an HTML OBJECT TO THE ELEMENT THAT OPENED THE DIALOG
  }
});

这称为:

$('a').live('click',function(){
  $('#dialog').dialog('open');
});

我想知道哪个<a>标记已经调用了该对话框。这可能吗?

谢谢!

4 个答案:

答案 0 :(得分:16)

.live()处理程序中,您可以存储对使用.data()点击的元素的引用,如下所示:

$('a').live('click',function(){
  $('#dialog').data('opener', this).dialog('open');
});

然后,为了稍后获取它,您可以从$('#dialog').data('opener')$.data(this, 'opener')获取open回调(因为this引用对话框元素)。例如,您的open函数可能如下所示:

open: function(event, ui) {
  $(this).html("Hi, I was opened by: " + $.data(this, 'opener').id);
}

这将显示您单击的锚点的id属性以打开对话框...您可以执行任何您想要的操作,$.data(this, 'opener')引用<a /> DOM元素。

You can give try a demo of this here

答案 1 :(得分:0)

假设你有一个像这样的按钮:

<input type="button" class="mybuttons" value="Click Me"/>

和一些css一样:

.openerclass
{
  background-color: red;
}

单击时添加该类

$(function()
{
    var myevent;
    $(".mybuttons").click(function(event){
       myevent = $(event.target); 
       $(".selector").dialog("open");
    });

    $(".selector" ).dialog({
       open: function(event, ui) { 
       var opener = $(event.target);
       myevent.addClass("openerclass");
       alert(myevent.nodeName);
       ... }
    });
});

编辑:修复语法错误并添加另一个示例以使其清除

Edit2:原文错误(有点)因为opener事件与click事件没有关联。修改为正确使用click事件。

答案 2 :(得分:0)

你可以给它一个id:

$('a').live('click',function(){
      $('#dialogTrigger').removeAttr('id');
      $(this).attr('id', 'dialogTrigger');
      $('#dialog').dialog('open');
}

open: function(event, ui) {
     // do something with $('#dialogTrigger')
}

答案 3 :(得分:0)

您可以将$(this)分配给me等变量,稍后再使用:

$(".locked").on('click',function unlock(){ 
    var me = $(this);

buttons: { 
       "Yes": function() {  
           me.removeAttr('disabled').removeClass('locked');  
       }