Событие переопределения / расширения jquery javascript - PullRequest
4 голосов
/ 11 августа 2011

У меня есть элемент с набором событий, например,

<input type="text" id="txt" onkeyup="javascript: alert('keyup');" />

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

jQuery(document).ready(function(){

var old = $("#txt").keyup;

$("#txt") 
     .unbind('keyup')
     .attr('onkeyup', '')
     .each(function() { this.onkeyup = null; });

$("#txt").keyup(function(event){

    alert("before old call");
    //old.call($(this));
    alert("after old call");
});

});

Но это не работает, как я ожидал. Кто-нибудь знает, как заставить это работать?

Ссылка на скрипку: http://jsfiddle.net/p5JeA/

Что если событие keyup для ввода не встроено, а установлено с помощью jQuery bind? Я хочу переопределить / расширить поведение по умолчанию, я не хочу менять базовый код.

Ответы [ 3 ]

2 голосов
/ 11 августа 2011

Вот рабочая скрипка: http://jsfiddle.net/mrchief/p5JeA/2/

var old = $("#txt")[0].onkeyup;

$("#txt")[0].onkeyup = null; // or function () {};
// or $("#txt").removeAttr('onkeyup');

jQuery не был включен в ресурсы. Кроме того, я закомментировал некоторые части, поскольку они вам не нужны.

1 голос
/ 11 августа 2011

Я разбудил вашу скрипку здесь: http://jsfiddle.net/xdaTH/

Я включил jQuery вместо MooTools, но также использовал .get (0) для получения фактического элемента dom, для которого определена функция onkeyup.

сценарий:

jQuery(document).ready(function() {
  var old = $("#txt").get(0).onkeyup;

  $("#txt").unbind('keyup').attr('onkeyup', '').each(function() {
      this.onkeyup = null;
  });

  $("#txt").keyup(function(event) {
    alert("before old call");
    old.call(this);
    alert("after old call");
  });

});
0 голосов
/ 11 августа 2011

Создайте свое собственное событие и затем запустите его:

$('#txt').bind('custom', function(event) {
   alert("before old call");
    //old.call($(this));
    alert("after old call");
});

$('#txt').trigger('custom', ['Custom', 'Event']);

Вы можете найти информацию об этом здесь: JQuery триггер

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