我有一个带事件集的元素,例如
<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设置怎么办? 我想覆盖/扩展默认行为,我不想更改基本代码。
答案 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