JQuery, как получить кнопку, которая открыла диалог - PullRequest
4 голосов
/ 20 июля 2010

У меня есть диалог, который открывается многими кнопками.Как я могу узнать, какая кнопка открыла это диалоговое окно?

$('#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 ]

16 голосов
/ 20 июля 2010

В вашем обработчике .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.

Демонстрацию этого вы можете получить здесь

0 голосов
/ 01 июля 2014

Вы можете присвоить $(this) такой переменной, как me, и использовать ее позже:

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

buttons: { 
       "Yes": function() {  
           me.removeAttr('disabled').removeClass('locked');  
       }
0 голосов
/ 20 июля 2010

Вы можете дать ему идентификатор:

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

open: function(event, ui) {
     // do something with $('#dialogTrigger')
}
0 голосов
/ 20 июля 2010

в предположении, что у вас есть кнопка, подобная такой:

<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);
       ... }
    });
});

Правка: исправьте синтаксическую ошибку и добавьте еще один пример, чтобы прояснить ситуацию

Правка2: оригинал был неверен (в некотором роде) в том, что событие открывания НЕ связано с событием щелчка.Изменено для правильного использования события щелчка.

...