Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как проверить наличие обработчика события на элементе? (https://javascript.ru/forum/jquery/63257-kak-proverit-nalichie-obrabotchika-sobytiya-na-ehlemente.html)

RioEiner 26.05.2016 21:08

Как проверить наличие обработчика события на элементе?
 
В общем такая задача:

var $body=$("body");
$body.on("keydown",move); // установил обработчик.

// потом бла-бла-бла в коде где может выключиться обработчик через $body.off(...)

Вопрос: Как проверить наличие обработчика в $body?

Благодарствую)

yazonnile 26.05.2016 22:40

гугл
http://stackoverflow.com/questions/1...sts-on-element

рони 26.05.2016 23:29

yazonnile,
спасибо!!!

рони 26.05.2016 23:31

Функция проверки наличия обработчика события на элементе
 
RioEiner,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css"></style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

  <script>
$(function() {
    var $body = $("body");
    $body.on("keydown", move);
    function move() {
        alert("test")
    }

    function test(elem, event, fun)
    {
     var events = $._data(elem, "events");
     return !!events && !!(events = events[event]) && (!fun || events.some(function(data) {
        return data.handler == fun
    }))
    }
    alert(test($body[0],"click"));//false кликов нет
    alert(test($body[0],"keydown"));//true есть  keydown
    alert(test($body[0],"keydown", move)); //true есть  keydown и в  keydown есть функция move
    alert(test($body[0],"keydown", test)); //false есть  keydown но в  keydown нет функция test
    $body.off();
    alert(test($body[0],"keydown", move));//false нет  keydown или в  keydown нет функция move
    $body.on("keydown", move);
    alert(test($body[0],"keydown", move)); //true есть  keydown и в  keydown есть функция move
});
  </script>
</head>

<body>


</body>
</html>


Часовой пояс GMT +3, время: 12:12.