jQuery 覆盖事件阻止默认



我正在覆盖slideDownjQuery事件,以便我可以捕获它并运行我自己的代码:

; (function ($) {
var orig_slideDown = $.fn.slideDown;
$.fn.slideDown = function () {
$(this).trigger('slideDown');
orig_slideDown.apply(this, arguments);
};
})(jQuery);

我现在可以将我的代码绑定到此事件:

$('.step2').bind('slideDown', function (e) {
if(ConditionsNotMet()){
e.preventDefault();
}

但是我无法用e.preventDefault()取消它. 我需要添加一些东西来支持这一点吗?

这里最好的选择是使用.triggerHandler,而不是使用 preventDefault,只需返回 false。然后,您可以检查 triggerHandler 的返回值,并使用它来决定是否启动滑降。

;(function ($) {
var orig_slideDown = $.fn.slideDown;
$.fn.slideDown = function () {
var orig_arguments = arguments;
return this.each(function () {
if ($(this).triggerHandler('slideDown') !== false) {
orig_slideDown.apply($(this), orig_arguments);
}
});
};
})(jQuery);
$('.step2').bind('slideDown', function () {
if(someCondition()){
return false;
}
});

(还更正了插件,使其在所有选定元素上正确链接和运行(

https://jsfiddle.net/xqz2933v/

最新更新