jquery javascript覆盖/扩展事件

时间:2011-08-11 18:18:56

标签: javascript jquery events

我有一个带事件集的元素,例如

<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 个答案:

答案 0 :(得分:2)

这是一个工作小提琴:http://jsfiddle.net/mrchief/p5JeA/2/

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

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

jQuery没有包含在资源中。另外,由于你不需要它们,我注释掉了一些部分。

答案 1 :(得分:1)

我把你的小提琴分到了这里:http://jsfiddle.net/xdaTH/

我已经开启了jQuery而不是MooTools,但也使用.get(0)来获取定义了onkeyup函数的实际dom元素。

脚本:

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");
  });

});

答案 2 :(得分:0)

创建您自己的自定义事件,然后触发它:

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

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

您可以在此处找到相关信息:jquery trigger