【问题标题】:jquery how to get the button that has opened the dialogjquery如何获取打开对话框的按钮
【发布时间】:2011-03-18 13:49:08
【问题描述】:

我有一个由许多按钮打开的对话框。我如何知道哪个按钮打开了该对话框?

$('#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> 标签调用了该对话框。这可能吗?

谢谢!

【问题讨论】:

  • 我编辑了我朋友的问题.. 请检查一下我发布了调用此对话框的代码 感谢您花时间检查我的问题

标签: javascript jquery jquery-ui dialog


【解决方案1】:

假设您有这样的按钮:

<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 事件无关。修改为正确使用点击事件。

【讨论】:

    【解决方案2】:

    你可以给它一个id:

    $('a').live('click',function(){
          $('#dialogTrigger').removeAttr('id');
          $(this).attr('id', 'dialogTrigger');
          $('#dialog').dialog('open');
    }
    
    open: function(event, ui) {
         // do something with $('#dialogTrigger')
    }
    

    【讨论】:

      【解决方案3】:

      在您的.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') 指的是&lt;a /&gt; DOM 元素。

      You can give try a demo of this here

      【讨论】:

      • 非常感谢..这正是我要找的
      • 现在不推荐使用 .live() 函数,jquery 现在推荐使用 .on 方法。
      【解决方案4】:

      您可以将$(this) 分配给me 之类的变量并稍后使用:

      $(".locked").on('click',function unlock(){ 
          var me = $(this);
      
      buttons: { 
             "Yes": function() {  
                 me.removeAttr('disabled').removeClass('locked');  
             }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        相关资源
        最近更新 更多