При использовании smoothstate.js отправка формы вызывает срабатывание smoothstate

У меня есть сайт, использующий smoothstate.js на каждой странице. на нескольких страницах у меня появляется модальное окно с формой. Эти формы работают просто отлично.

На другой странице у меня есть основная форма, включенная в HTML. Когда я нажимаю кнопку отправки в форме, форма фактически отправляется, но запускается smoothstate, которое затухает в содержимом и запускает мой экран загрузки.

Я бы хотел, чтобы этого не произошло. Вот моя функция плавного состояния:

$(function(){
    'use strict';
    var $page = $('#main'),
    options = {
        debug: true,
        prefetch: true,
        cacheLength: 2,
        allowFormCaching: false,
        forms: 'form',
        blacklist: 'input[type="submit"], .animsition-loading, .hs-button',
        onStart: {
            duration: 1050, // Duration of our animation
            render: function ($container) {
                $('.animsition-loading').show();
                $container.addClass( 'slide-out' );
                smoothState.restartCSSAnimations();
            }
        },
        onReady: {
            duration: 0,
            render: function ($container, $newContent) {
                $container.html($newContent);
                sitejs();
                $(document).ready();
                $(window).trigger('load');
            }
        },
        onAfter: function( $container ) {
            $('.animsition-loading').hide();
            $container.removeClass( 'slide-out' );
        }
      },
      smoothState = $page.smoothState(options).data('smoothState');
});

2 ответа

У меня была такая же проблема для меня с формой бюллетеня. Вот решение вашей проблемы. Вы должны добавить класс из черного списка, который есть в вашем JS (например, "no-smoothsate"), в тег FORM. Работает отлично.

<form class="no-smoothState">
...
</form>

Я нашел решение здесь

Я считаю, что smoothstate по умолчанию работает как с формами, так и со ссылками, так как cf7 уже работает с AJAX, вам просто нужно занести в черный список, как уже упоминалось.

Для cf7 это код:

;(function($) {
'use strict';

    var $body = $('html, body'),
    content = $('#main').smoothState({  
        blacklist: '.wpcf7-form',
        // Runs when a link has been activated
        onStart: {
            duration: 500, // Duration of our animation
            render: function ($container) {
                // Add your CSS animation reversing class
                $container.addClass('is-exiting');

                // Restart your animation
                smoothState.restartCSSAnimations();
            }
        },
        onReady: {
            duration: 0,
            render: function ($container, $newContent) {
                // Scroll user to the top, this is very important, transition may not work without this
                $body.scrollTop(0);

                // Remove your CSS animation reversing class
                $container.removeClass('is-exiting');

                // Inject the new content
                $container.html($newContent);

                // Trigger load functions
                $(document).ready();
                $(window).trigger('load');
            }
        },
        onAfter: function($container) {
            initContactForm();
        }
    }).data('smoothState');
})(jQuery);
Другие вопросы по тегам