jquery javascript覆盖/扩展事件

jquery javascript覆盖/扩展事件,javascript,jquery,events,Javascript,Jquery,Events,我有一个带有事件集的元素,例如 <input type="text" id="txt" onkeyup="javascript: alert('keyup');" /> 但它并没有像我预期的那样起作用。有人知道怎么做吗 链接到小提琴: 如果输入的keyup事件不是内联的,而是使用jQuery绑定设置的,该怎么办? 我想覆盖/扩展默认行为,但不想更改基本代码 这是一把小提琴: jQuery未包含在资源中。此外,我还注释了一些您不需要的部分。创建您自己的自定义事件,然后触发它: $('

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

<input type="text" id="txt" onkeyup="javascript: alert('keyup');" />
但它并没有像我预期的那样起作用。有人知道怎么做吗

链接到小提琴:

如果输入的keyup事件不是内联的,而是使用jQuery绑定设置的,该怎么办? 我想覆盖/扩展默认行为,但不想更改基本代码

这是一把小提琴:


jQuery未包含在资源中。此外,我还注释了一些您不需要的部分。

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

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

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

你可以在这里找到它的信息:

我把你的小提琴叉到了这里:

我启用了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");
  });

});

它对我来说很好,您忘了在JSFIDLE中包含jQuery。那通电话会不会删除VeveEventListener?非常感谢@CodeReaper下面的回答也很有帮助。我似乎忘记了jQuery返回匹配元素的集合。为什么要查询
DOM
两次?您对
old
@gdoron不做任何操作:
old
保留旧的句柄,以备以后恢复。当然,您不需要两次查询DOM。这是一个快速的示例,而不是可用于生产的代码。
$('#txt').bind('custom', function(event) {
   alert("before old call");
    //old.call($(this));
    alert("after old call");
});

$('#txt').trigger('custom', ['Custom', 'Event']);
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");
  });

});