2013-05-04 46 views
0

我以前有一個問題,其中jquery的submit()處理程序觸發兩次。我做了一個測試文件,只是一個基本的提交事件處理程序,它工作得很好但下面的代碼不起作用:雙JQuery表單觸發器

$(document).ready(function(){ 
    $('#regForm').submit(function(e){ 
     e.preventDefault(); 
     $('#regForm').fadeTo('slow', 0, function(){ 
      $('#regForm').css('display', 'none'); 
      $('#mainbox').animate({height: 90}, 100); 
      $('#one, #two, #three #four').fadeTo('slow', 0, function(){ 
       $('#one').html('Processing...').fadeTo(300, 1, function(){ 
        $.post("/data/handles/account/register.php", {user: $('#user').val(), pass: $('#pass').val(), passc: $('#passc').val(), email: $('#email').val()}, function(data){ 
         if (data.error == 8) { 
          alert('Yes'); 
          /* 
          $('#one').html('Processing...' + data.content); 
          $('#two').html('Logging In...').fadeTo('slow', 1, function(){ 
           $('#three').html('Redirecting...<a href="/account.php">[Manual]</a>').fadeTo('slow', 1, function(){ 
            setTimeout(redirect, 1000); 
           }); 
          }); 
          */ 
         } else { 
          alert('No'); 
          /* 
          $('#one').html(data.content); 
          $('#two').html('<a href="#" reset>Retry</a>').fadeTo('slow', 1); 
          */ 
         } 
        }, "json"); 
       }); 
      }); 
     }); 
    }); 
}); 

當我測試此代碼它會提醒「是」如果我兩次輸入正確的一切,使得2 mysql文件中的數據庫中的條目。我查了一下與這個問題有關的其他問題,但沒有人解決這個問題,所以我想知道我是否在這裏做錯了什麼,或者是否有某種方法來解決它。謝謝您的幫助。

+1

它不應該加倍努力。檢查你是否附加了'.js'文件兩次。如果它沒有幫助提供一個鏈接,我們可以看到你的問題,請。 – zeliboba 2013-05-04 15:07:37

回答

1

的問題是在這條線:

$('#one, #two, #three #four').fadeTo('slow', 0, function(){ 

您連接fateTo至3元,4,如果你把另一 「」 #three後。所以,在每個fadeTo之後,jQuery都會調用回調函數()來表示你的帖子提交的地方。您可以創建計數以等待所有fadeTo完成或將您的邏輯更改爲僅在「one」回調中提交。

這裏的樣本:

var count = 0; // count of elements that already finished the fadeTo 
var limit = 2; // number of elements that have to wait the fadeTo 
$('#regForm').submit(function (e) { 
    e.preventDefault(); 
    $('#regForm').fadeTo('slow', 0, function() { 
     $('#regForm').css('display', 'none'); 
     $('#mainbox').animate({ 
      height: 90 
     }, 100); 
     count = 0; 
     $('#one, #two, #three #four').fadeTo('slow', 0, function() { 
      fadeToSubmit(); 

     }); 
    }); 
}); 

function fadeToSubmit(){ 
    count++; 
    if(count == limit){ 
      $('#one').html('Processing...').fadeTo(300, 1, function() { 
       $.post("/data/handles/account/register.php", { 
        user: $('#user').val(), 
        pass: $('#pass').val(), 
        passc: $('#passc').val(), 
        email: $('#email').val() 
       }, function (data) { 
        if (data.error == 8) { 
         alert('Yes'); 

        } else { 
         alert('No'); 

        } 
       }, "json"); 
      }); 
    } 
} 
+0

謝謝,我不知道它會這樣做。 – lemondrop 2013-05-04 17:44:52