AJAX表单仅在IE9中运行一次

时间:2012-12-03 16:06:42

标签: jquery cross-browser internet-explorer-9

我正在编写一个简单的脚本,通过ajax将注册表单提交到我的网站。它在现代浏览器中完美运行。在IE9中,表单只能正确提交一次。然后,如果我再次尝试提交相同的表单,第二次表单永远不会返回,加载程序gif将永久保留。知道为什么会这样吗?

编辑:我应该指出我正在使用此jquery form plugin提交表单。其次,当我在提交表单后检查源代码时,会出现正确的标记。我可以手动添加不透明样式来显示表单,所以我认为这表明问题是连接到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>

3 个答案:

答案 0 :(得分:1)

在某些IE浏览器中,您必须重新定义事件变量:

ajaxregister = function(e) {
        e = e || window.event;
        e.preventDefault();
...
}

答案 1 :(得分:0)

在jquery代码中使用cache:false

示例:

$(this).ajaxSubmit({
    cache : false,
    //existing code
});

答案 2 :(得分:0)

我通过用jquery选择器替换e.target来实现这一点。请参见成功的最后几行: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引用事件的方式有关。