Как найти некоторые определенные обработчики событий с помощью jQuery? - PullRequest
1 голос
/ 16 октября 2010

Поскольку многие браузеры не отображают всплывающие подсказки на отключенных элементах формы (как в Opera), я решил эмулировать отключенную кнопку с помощью jQuery.

При отключении я просто устанавливаю класс элемента управления как отключенный, а для кнопок / отправки элементов управления добавляю обработчик событий click(function(){return false;}) и могу отсоединить его позже при повторном включении элемента управления.

Теперь проблема- Мне нужно удалить все подключенные обработчики событий (click, enter key) из отключенного элемента управления, кроме «mouseenter» и «mouseleave», потому что я использую настраиваемую подсказку на основе jQuery, для которой нужны эти события.И после повторного включения кнопки мне нужно восстановить все обработчики обратно.

Я знаю, что могу хранить прикрепленные обработчики событий в $.data(), но не знаю, как собрать все обработчики событий, кроме 'mouseenter' и 'mouseleave'.

Можете ли выпомогите мне?

Ответы [ 3 ]

2 голосов
/ 16 октября 2010

попробуйте это:

<script>

$(function() {

//Lets attach 2 event handlers to the div
$("#el").click(function(){ alert("click"); });
$("#el").mouseover(function(){ alert("mouseover"); });


//We iterate on the div node and find the events attached to it

$.each($("#el").data("events"), function(i, event) {
    output(i);
    $.each(event, function(j, h) {
      output(h.handler);
      //DO your unbind here if its not a mouse-enter or a mouseleave
    });
  });
});

function output(text) {
    $("#output").html(function(i, h) {
        return h + text + "<br />";
    });
}

</script>

<div id="el" style="width: 200px; height: 200px; border: solid 1px red;">Test</div>
<span id="output"></output>
1 голос
/ 16 октября 2010

Я бы не пошел на всю эту работу.

Поскольку у вас есть класс .disabled для отключенных элементов, я бы просто использовал его как флаг для отключения / включения функциональности, протестировав этот класс в операторе if() и вернув false, еслиэлемент имеет класс disabled.

Поэтому, используя указанный вами обработчик click вместо:

$('someElement').click(function(){return false;});

Я бы сделал это:

$('someElement').click(function() {
    if( $(this).hasClass( 'disabled' ) ) {
        return false;
    } else {
        // run your code
    }
});

Теперь, когда вы удалите класс .disabled, ввод снова будет работать.Нет unbind/bind или трассировка с использованием .data().Гораздо проще.

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