jQuery覆盖事件preventDefault

时间:2018-05-02 21:12:36

标签: javascript jquery

我覆盖了slideDown jQuery事件,因此我可以捕获它并运行我自己的代码:

; (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()取消它。我需要添加一些来支持这个吗?

1 个答案:

答案 0 :(得分:0)

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

;(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/