Я переопределяю событие jQuery slideDown, чтобы захватить его и запустить собственный код:

; (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(). Есть ли что-то, что мне нужно добавить, чтобы поддержать это?

0
StratMan 3 Май 2018 в 00:12

1 ответ

Лучший ответ

Лучше всего использовать .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/

0
Kevin B 2 Май 2018 в 21:38