0

我在jquery form plugin的幫助下使用AJAX提交表單。它的工作原理除了e.preventDefault()只在IE8中有效。第二次提交後,頁面將重定向到表單的網址。IE8 e.preventDefault()只能工作一次(在提交ajax後被忽略)

我很確定我需要做一些事件代表團,但我不完全確定如何去做。

上下文是一個WordPress的網站。以下腳本出現在註冊表單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> 
+0

可能是有幫助的包括:這是否只是直線HTML?它是否像ASP.NET Web窗體那樣與您的表單事件相關聯? 另外,我還沒有嘗試過,但你可以在jsfiddle中得到這個repro嗎? – aikeru

+0

我更新了問題。它是直接的HTML。 – emersonthis

+0

我看到你正在使用jquery的delegate()函數,但使用jquery表單插件。瀏覽示例時,它看起來像表單插件使用「$(selector).ajaxForm(argsObject)」來綁定事件。也許你應該使用表單方法,而不是原始的jQuery API ..你有沒有試過這個? – aikeru

回答

0

我解決了這個問題,在成功回調函數的末尾添加了以下幾行代碼。 Wordpress檢測IE並將「ie8」id添加到html標籤。你可以很容易地檢查,即與jquery或modernizr也。

if ($('html').attr('id') == "ie8") { 
    $(".widget_reg_widg #registerform").delegate(this, "submit", ajaxregister); 
}