0

ajaxを介して登録フォームを自分のサイトに送信する簡単なスクリプトを書いています。最新のブラウザで完全に機能します。IE9では、フォームは1回だけ正しく送信されます。次に、同じフォームをもう一度送信しようとすると、2回目にフォームが返されることはなく、ローダーgifは永続的に残ります。なぜこれが起こっているのか考えていますか?

編集:フォームを送信するためにこのjqueryフォームプラグインを使用していることを指摘しておく必要があります。次に、フォームを送信した後にソースを調べると、正しいマークアップがそこにあります。フォームを表示するために不透明度スタイルを手動で追加できるので、これは問題がIE9とjqueryフェード関数に関連していることを示唆していると思います。

    <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.preventDefault();
            $(this).fadeTo(500, 0);
            $(this).siblings("#loading").fadeIn();
            $(this).ajaxSubmit({
                //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);
                    $(e.target).siblings("#loading").fadeOut();

                }
            });
        }

        $(".widget_reg_widg #registerform").submit( ajaxregister );
    });
    </script>
4

3 に答える 3

1

一部のIEブラウザーでは、イベント変数を再定義する必要があります。

ajaxregister = function(e) {
        e = e || window.event;
        e.preventDefault();
...
}
于 2012-12-03T16:33:01.827 に答える
0

cache:falsejqueryコードで使用します。

例 :

$(this).ajaxSubmit({
    cache : false,
    //existing code
});
于 2012-12-03T16:10:38.053 に答える
0

e.targetをjqueryセレクターに置き換えることで、これを機能させることができました。成功の最後の数行を参照してください:function(){..。

                success: function( data ) {

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

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

                    $("#"+target_id).siblings("#loading").css('display', 'none');

                }

なぜそれがうまくいったのかわからない。IE9がイベントを参照する方法と関係があるはずです。

于 2012-12-03T19:16:31.130 に答える