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

ользую

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

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

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

Есть идеи?

Обновить: Вот как настроено контекстное меню

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

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

#contacts tbody tr 

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

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

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

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

Ответы на вопрос(2)

Решение Вопроса

у, используя эту ссылку.

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

$('#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). Посмотри на этопример скрипки для полного разрешения.

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

var cachedHandler = null;
// disable
cachedHandler = $('#demo2').data('events').contextmenu[0].handler;
$('#demo2').unbind('contextmenu', cachedHandler);
// enable
$('#demo2').bind('contextmenu', cachedHandler);
 Artjom Zabelin18 янв. 2011 г., 22:10
что ты имеешь в виду под кешем?
 Josiah Ruddell19 янв. 2011 г., 15:42
@ArtWorkAD - быстро взглянул на источник и нашел проблему. Смотрите обновленное решение и проверьте скрипку. Возможно, стоит создать новый плагин и включить метод отключения API (или, возможно, разветвление текущего плагина).
 Artjom Zabelin19 янв. 2011 г., 22:14
спасибо, на jsFiddle это тоже работает для меня, но когда я использую код в моем проекте, навигация по моей вкладке больше не работает.jsfiddle.net/mSYfs/1 переменная c равна 0, если таблица пуста, в этом случае я отменяю привязку событий и больше не могу перемещаться со своими вкладками. "Unbind" отменяет привязку всех событий?
 Artjom Zabelin18 янв. 2011 г., 22:45
Я попробовал это таким образом, но я не уверен, что это работает, я обновил свой вопрос с моим кодом. Я не уверен, что кешировать ...
 Josiah Ruddell18 янв. 2011 г., 22:14
@ArtWorkAD - Кэшировать / хранить / сохранять. вместо того, чтобы объявить функцию анонимно встроенной, сохраните ее в переменной. Я обновил ответ, чтобы сделать его более понятным.

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

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

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

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

 Artjom Zabelin19 янв. 2011 г., 11:23
это не работает, может быть, это тот факт, что обработчик клика применяется к каждому элементу tr в таблице ...
 jcuenod19 янв. 2011 г., 11:36
Вы пробовали решение Иосии?
 Artjom Zabelin19 янв. 2011 г., 11:42
проблема в том, что нет обработчика кликов, который я мог бы связать, в моем приложении у меня есть только код выше в моем вопросе, вот и все, так что я не знаю, как получить clickHandle, который мне нужно связать снова

Ваш ответ на вопрос