0

jqueryフォームプラグインの助けを借りてAJAXを使用してフォームを送信しています。e.preventDefault()IE8で1回だけ機能することを除いて、うまく機能します。2回目の送信後、ページはフォームのURLにリダイレクトされます。

ある種のイベント委任を行う必要があると確信していますが、その方法は完全にはわかりません。

コンテキストはワードプレスサイトです。次のスクリプトは、登録フォームHTMLの直前に表示されます。

    <script type="text/javascript">

    jQuery.fn.outerHTML = function(s) {
    return (s)
      ? this.before(s).remove()
      : jQuery("<p>").append(this.eq(0).clone()).html();
    }

    jQuery(document).ready(function($){

        $("form input").removeAttr('tabindex');

        ajaxregister = function(e) {
            //e = e || window.event;
            e.preventDefault();
            $(this).animate({opacity:0}, 500);
            $(this).siblings("#loading").fadeIn();
            $(this).ajaxSubmit({
                //cache : false,
                //url:'http://streetofwalls.dev/wp-login.php?action=register'
                success: function( data ) {
                    //console.log(data);

                    var $message = $(data).find('.message').outerHTML();
                    var $error = $(data).find('#login_error').outerHTML();
                    var $form = $(data).find('#registerform').outerHTML();
                    //console.log( 'success' );

                    //$(e.target).html( ( ($error) ? $error : $message ) + $form ).fadeTo(500,1);
                    var target_id = $(e.target).attr("id");
                    $("#"+target_id).html( ( ($error) ? $error : $message ) + $form ).animate({opacity:1}, 500);
                    $("#"+target_id).siblings("#loading").css('display', 'none');

                }
            });
        return false;
        }

        $(".widget_reg_widg #registerform").submit( ajaxregister ); //should this be .delegate() ???


    });
    </script>
4

1 に答える 1

0

成功コールバック関数の最後に次の行を追加することで、これを解決しました。WordpressはIEを検出し、「ie8」IDをhtmlタグに追加します。つまり、jqueryまたはmodernizrを使用して簡単に確認できます。

if ( $('html').attr('id') == "ie8" ) {
    $(".widget_reg_widg #registerform").delegate( this, "submit", ajaxregister );
}
于 2012-12-03T22:53:59.587 に答える