Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отключение всех событий от элемента (https://javascript.ru/forum/misc/18583-otklyuchenie-vsekh-sobytijj-ot-ehlementa.html)

uraf78 07.07.2011 15:17

Отключение всех событий от элемента
 
Зраствуйте,
у меня проблема с тем что внешняя js библиотека привязывает событие на нажатие клавиши "пробел", из-за чего в полях input я не могу поставить пробел. Код библиотеки я не могу менять, так как он зашифрован.

может кто подскажет как от элемента input отключить все события связанные с нажатием клавиш.
Пробовал на jquery:
$("input").unbind('keydown');
$("input").unbind('keypress');
$("input").unbind('keyup');
но не помогает

Заранее благодарю.

melky 07.07.2011 15:57

<input id="a"><br>Пробел нажат раз : <b id="b">0</b>  <br> <button onclick="stop(this)">Stop it!</button>

<script>
var input = document.getElementById("a"),
     log = document.getElementById("b"),
     pressed=0,
     handler = function (e){
           if(e.keyCode===32){ 
                   log.innerHTML=++pressed;
          }
      }
input.addEventListener( 'keydown', handler, false);

function stop(a){

input.onkeydown = null;
input.removeEventListener('keydown', handler, false)

a.setAttribute('disabled','disabled')
}
</script>

trikadin 07.07.2011 16:03

melky, а для addEventListener?

melky 07.07.2011 16:20

только надо знать обработчик :(

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

<input id="a"> <button onclick="stop(this)">Stop it!</button> <br>Пробел нажат раз : <b id="b">0</b> 

<script>
var input = document.getElementById("a"),
     log = document.getElementById("b"),
     pressed=0,
     handler = function (e){
           if(e.keyCode===32){ 
                   log.innerHTML=++pressed;
          }
      }
input.addEventListener( 'keydown', handler, false);





function stop(a){

// удаляем старый
document.body.removeChild( input );

// вставляем новый
input = document.body.insertBefore(  document.createElement( 'input' )  , document.body.firstChild );

// красивости...
a.setAttribute('disabled','disabled');
a.innerHTML = "replaced"
}
</script>

trikadin 07.07.2011 16:31

Цитата:

Сообщение от melky
input.addEventListener( 'keydown', handler);

false забыл.
input.addEventListener( 'keydown', handler, false);

uraf78 07.07.2011 16:41

пока не помогло
 
я немного поэкспериментировал и выяснилось что обработчик висит не на элементе input, а вообще на всем окне так как срабатывает при нажатии на пробел в любой точке экрана
Как с этим быть, ка его грохнуть?


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