Отключить и включить контекстное меню jQuery - PullRequest
2 голосов
/ 19 января 2011

Я использую

$('#test').unbind('click');

, чтобы удалить событие click для элемента #test.Как мне сделать элемент кликабельным снова?

На самом деле у меня есть стол.При событии щелчка появляется контекстное меню.Но если нет записей, меню должно быть отключено.Поэтому я использую unbind выше.Поскольку контекстное меню создается с помощью плагина, я не знаю, как сделать его снова кликабельным.

Есть идеи?

Обновление: Вот как выглядит контекстное меню.настроить

 $('#contacts tbody tr').contextMenu('myMenu1', {
    bindings: {
      'sms': function(t) {},
      'delete': function(t) {}
    } 
 });

Так как я все еще не уверен, как решить мою проблему, я опишу ее немного подробнее.Я использую облегченный плагин контекстного меню в jQuery для отображения контекстных меню.

#contacts tbody tr 

- это строки таблицы, а myMenu1 - контекстное меню, которое появляется при щелчке.

На моей странице у меня есть таблица.Каждая строка имеет свое собственное контекстное меню, которое всегда одно и то же, но function(t) всегда ссылается на строку, по которой щелкнули.

Что ж, таблица может быть пустой, поэтому я хочу отключить контекстное меню.Я верю, что могут быть способы сделать это.Один из них - открепить событие click, у меня это не работает.

Надеюсь, у кого-нибудь есть идея.

Ответы [ 2 ]

3 голосов
/ 19 января 2011

Кэшируйте обработчик в переменную. Затем связывайте и снимайте привязку, используя эту ссылку.

Вместо привязки вашего события клика:

$('#test').bind('click', function(){
    alert('hi!');
});

Объявление функции для переменной:

var clickHandle = function(){
    alert('hi!');
};

А затем связать, используя имя переменной:

$('#test').bind('click', clickHandle);

Затем вы можете отменить привязку к определенному обработчику кликов:

$('#test').unbind('click', clickHandle);

Тогда вы все равно можете повторно связать той же функцией:

$('#test').bind('click', clickHandle);

Взглянул на источник. Событие привязано к контекстному меню, а не к клику.

Вы можете получить доступ к функции через свойство data.events элемента (аналогично тому, что говорил j3frea). Посмотрите на этот пример fiddle для полного разрешения.

По сути, вы можете сделать это:

var cachedHandler = null;
// disable
cachedHandler = $('#demo2').data('events').contextmenu[0].handler;
$('#demo2').unbind('contextmenu', cachedHandler);
// enable
$('#demo2').bind('contextmenu', cachedHandler);
1 голос
/ 19 января 2011

Взгляните на этот вопрос Перепроверьте событие DOM с помощью jQuery

Решение Джозии предпочтительнее, но если вы действительно хотите полностью отменить привязку события клика, я думаю, вы могли бы сделать это:

var storedClick = $('#test').data('events').click[0].handler;
$('#test').unbind('click');
$('#test').bind('click', storedClick);

Помните, что data ('events'). Click - это массив, поэтому вам нужно будет хранить обработчик для каждого члена массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...