Лучший способ удалить обработчик событий в jQuery?

Неприятный обход, но, безусловно, возможно использовать вложенный запрос. Создайте временную таблицу MYVALUES со столбцом в ней. Вставьте свой список значений в таблицу MYVALUES. Затем выполните

select my_column from my_table where search_column in ( SELECT value FROM MYVALUES )

Ужасно, но жизнеспособной альтернативой, если ваш список значений очень велик.

Этот метод имеет дополнительное преимущество потенциально лучших планов запросов от оптимизатора (проверьте страница для нескольких значений, таблицы могут быть только один раз вместо одного значения и т. д.) могут сэкономить накладные расходы, если ваша база данных не кэширует подготовленные операторы. Ваши «INSERTS» должны выполняться в пакетном режиме, и таблица MYVALUES может потребоваться изменить, чтобы иметь минимальную блокировку или другие высоконадежные защиты.

1019
задан Konrad Borowski 20 February 2018 в 16:42
поделиться

5 ответов

jQuery ≥ 1.7

С jQuery 1.7 вперед событие API было обновлено, .bind() / .unbind() все еще доступны для назад совместимости, но предпочтительный метод использует на () / прочь () функции. Ниже теперь был бы,

$('#myimage').click(function() { return false; }); // Adds another click event
$('#myimage').off('click');
$('#myimage').on('click.mynamespace', function() { /* Do stuff */ });
$('#myimage').off('click.mynamespace');
<час>

jQuery < 1.7

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

$('#myimage').click(function() { return false; }); // Adds another click event

Оба события щелчка будут тогда запущены.

, Поскольку люди сказали, что можно использовать, развязывают для удаления всех событий щелчка:

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

, Если Вы хотите добавить единственное событие и затем удалить его (не удаляя других, которые, возможно, были добавлены) тогда можно использовать пространство имен события:

$('#myimage').bind('click.mynamespace', function() { /* Do stuff */ });

и удалить просто Ваше событие:

$('#myimage').unbind('click.mynamespace');
1570
ответ дан Supuhstar 20 February 2018 в 16:42
поделиться

возможно, развязывать метод будет работать на Вас

$("#myimage").unbind("click");
31
ответ дан John Boker 20 February 2018 в 16:42
поделиться

Это может быть сделано при помощи развязывать функции.

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

можно добавить несколько обработчиков событий к тому же объекту и событию в jQuery. Это означает добавлять, что новый не заменяет старые.

существует несколько стратегий изменения обработчиков событий, таких как пространства имен события. Существуют некоторые страницы об этом в документах онлайн.

Взгляд на этот вопрос (это - то, как я узнал о, развязывают). Существует некоторое полезное описание этих стратегий в ответах.

, Как считать связанные функции обратного вызова при наведении курсора в jquery

37
ответ дан Community 20 February 2018 в 16:42
поделиться

This wasn't available when this question was answered, but you can also use the live() method to enable/disable events.

$('#myimage:not(.disabled)').live('click', myclickevent);

$('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });

What will happen with this code is that when you click #mydisablebutton, it will add the class disabled to the #myimage element. This will make it so that the selector no longer matches the element and the event will not be fired until the 'disabled' class is removed making the .live() selector valid again.

This has other benefits by adding styling based on that class as well.

63
ответ дан 19 December 2019 в 20:20
поделиться

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

function userPageLock(){
    $("body").bind("ajaxComplete.lockpage", function(){
        $("body").unbind("ajaxComplete.lockpage");
        executePageLock();      
    });
};  

function executePageLock(){
    //do something
}
7
ответ дан 19 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: