Javascript 绑定";“向上”;jQuery中的元素?它';有可能吗?
例如:Javascript 绑定";“向上”;jQuery中的元素?它';有可能吗?,javascript,jquery,html,json,Javascript,Jquery,Html,Json,例如: $(X).bind('click', function() { alert( 'Two' ); }); $(X).bind('click', function() { alert( 'Three' ); }); $(X).bind('click', function() { alert( 'Four' ); }); $(X).bind('click', function() { alert( 'Five' ); }); **$(X).bindUp('click', function()
$(X).bind('click', function() { alert( 'Two' ); });
$(X).bind('click', function() { alert( 'Three' ); });
$(X).bind('click', function() { alert( 'Four' ); });
$(X).bind('click', function() { alert( 'Five' ); });
**$(X).bindUp('click', function() { alert( 'One' ); });**
当用户单击X时,输出应为:
alert( 'One' );
alert( 'Two' );
alert( 'Three' );
alert( 'Four' );
alert( 'Five' );
有可能吗
感谢……对于简单的案例,我认为您可以这样做: 示例: 当您使用此
.bindUp()
插件时,它只会执行一个正常的.bind()
,然后从末尾删除事件,并将其放在开头
同样,这只适用于简单的情况
EDIT:将其用于多个事件应该很简单,但不要尝试将其用于
悬停
编辑:这里有一个版本可以处理多个(空格分隔的)事件(同样,不要与
悬停一起使用)
:
示例:
编辑:修复了“多”版本中
len
变量未重置的错误。回答得好!不过,由于它与较旧的jQuery版本相关,并且不支持(events[,selector][,function])语法上的。现在它适用于jQuery3.3,并且可以定义一个调用它的选择器。以下是一个例子:
$(document).ready(function() {
$.fn.bindUp = function() {
if (arguments.length >= 2) {
var eventType = '';
var type = eventType.split(/\s+/);
var overrideFunction = null;
var bindTo = $(this);
var bindToSelector = '';
var documentBinding = false;
if (typeof arguments[0] !== 'undefined' && arguments[0] !== '') {
eventType = arguments[0];
eventType = eventType.split(/\s+/);
} else {
console.log("Wrong type");
return false;
}
if (typeof arguments[2] !== 'undefined' && typeof arguments[1] !== 'undefined' && $.isFunction(arguments[2])) {
overrideFunction = arguments[2];
}
if (!$.isFunction(arguments[1]) && typeof arguments[1] != 'undefinded' && typeof arguments[2] !== 'undefined' && $.isFunction(arguments[2])) {
bindTo = $(arguments[1]);
bindToSelector = arguments[1];
if ($(this).is($(document))) {
documentBinding = true;
}
}
if (bindTo.length > 0) {
$.each(bindTo, function() {
var len = eventType.length;
while (len--) {
$(this).on(eventType[len], overrideFunction);
evt = $._data(this, 'events')[eventType[len]];
evt.splice(0, 0, evt.pop());
}
});
} else {
var len = eventType.length;
var evt = {};
while (len--) {
console.log(bindToSelector);
$(document).on(eventType[len], bindToSelector, overrideFunction);
}
}
} else {
console.log("Missing arguments");
return false;
}
};
$('#reorderButton').on("click", function(e) {
e.preventDefault();
e.stopPropagation();
alert("bound first, but executing second");
});
$(document).bindUp('click', '#reorderButton', function(e) {
alert("bound second, but executing first");
});
})) 包扎?与绑定“向下”或“左”相反?:)BindUp方法不存在…只是我想做的一个示例。您必须删除所有以前的处理程序并重新连接它们才能执行此操作,这不是一个明确的过程,您是在寻找此示例,还是一个更通用的方法?
$.fn.bindUp = function(type, fn) {
type = type.split(/\s+/);
this.each(function() {
var len = type.length;
while( len-- ) {
$(this).bind(type[len], fn);
var evt = $.data(this, 'events')[type[len]];
evt.splice(0, 0, evt.pop());
}
});
};
$(document).ready(function() {
$.fn.bindUp = function() {
if (arguments.length >= 2) {
var eventType = '';
var type = eventType.split(/\s+/);
var overrideFunction = null;
var bindTo = $(this);
var bindToSelector = '';
var documentBinding = false;
if (typeof arguments[0] !== 'undefined' && arguments[0] !== '') {
eventType = arguments[0];
eventType = eventType.split(/\s+/);
} else {
console.log("Wrong type");
return false;
}
if (typeof arguments[2] !== 'undefined' && typeof arguments[1] !== 'undefined' && $.isFunction(arguments[2])) {
overrideFunction = arguments[2];
}
if (!$.isFunction(arguments[1]) && typeof arguments[1] != 'undefinded' && typeof arguments[2] !== 'undefined' && $.isFunction(arguments[2])) {
bindTo = $(arguments[1]);
bindToSelector = arguments[1];
if ($(this).is($(document))) {
documentBinding = true;
}
}
if (bindTo.length > 0) {
$.each(bindTo, function() {
var len = eventType.length;
while (len--) {
$(this).on(eventType[len], overrideFunction);
evt = $._data(this, 'events')[eventType[len]];
evt.splice(0, 0, evt.pop());
}
});
} else {
var len = eventType.length;
var evt = {};
while (len--) {
console.log(bindToSelector);
$(document).on(eventType[len], bindToSelector, overrideFunction);
}
}
} else {
console.log("Missing arguments");
return false;
}
};
$('#reorderButton').on("click", function(e) {
e.preventDefault();
e.stopPropagation();
alert("bound first, but executing second");
});
$(document).bindUp('click', '#reorderButton', function(e) {
alert("bound second, but executing first");
});