2011-10-03 26 views
0

我試圖按順序做一些事情,而且我遇到了一些麻煩。試圖讓一些jQuery函數按順序運行。是回調的問題?

  1. 當與ID #sub_button單擊該按鈕時,
  2. 確保每個元素與類「.verify」有它自己的對象的值(見代碼)...
  3. ...如果不是,模糊該元素(將運行一些其他代碼併爲其創建一個對象)。
  4. 在上面的IF檢查完成後(現在所有元素都應該有一個對象),那麼運行函數「isitgood」。 (在「isitgood」功能運行前的所有元素得到他們的對象值,這是在模糊完成)

    $("#sub_button").click(function() { 
    
        $(".verify").each(function(){ 
    
         objtitle = $(this).attr('id'); 
    
         if (!myObj[objtitle]) { 
    
         $("#"+objtitle).blur(); // Define anything undefined 
    
         } 
    
    
        }); // end each 
    
    isitgood(); 
    
    }); // end click function 
    
    function isitgood(){ 
    
        if (myObj.login_id == "ok" && myObj.email == "ok") { 
    
        // submit the form 
    
        } else { 
    
        // shows error 
    
        } 
    
    } 
    

而且,一旦我得到正確的順序此執行,這將是很好做某種.each循環來檢查是否所有對象值==「ok」,而不是在函數中指定所有對象值。對象的所有名稱(即login_id,email)都是類名稱爲.verify的任何元素的ID attr。

+0

爲什麼你期望在一個元素上調用'blur'來更新一個叫做'myObj'的Javascript對象? – Dan

回答

0

嗯,你可以在點擊回調做一個快速的索引檢查:

var sub_buttons = $("#sub_button"); 
sub_buttons.click(function() { 

    $(".verify").each(function(index){ 

     objtitle = $(this).attr('id'); 

     if (!myObj[objtitle]) { 

     $("#"+objtitle).blur(); // Define anything undefined 

     } 

     if (index == sub_buttons.length - 1) 
      isitgood(); 
     } 

    }); // end each 

}); // end click function 

這將檢查如果你是jQuery對象中的最後一個元素上,如果是這樣,將運行isitgood()功能。這樣,在執行之前確保你已完成$.each方法isitgood()

0

Javascript是異步的。你的isitgood()將始終發射,而.each仍然在做這件事。

從你的代碼說,你不知道你要完成什麼。您使用.each的方式似乎表明您的代碼中有多個相同的ID屬性。這是行不通的,ID必須是唯一的。你似乎也在混合jQuery和普通的Javascript。使用一個或另一個。其實只是使用jQuery,你會節省自己的時間和精力!

如果你確實有獨特的ID,那麼你根本不需要.each。只需用if語句檢查適當的ID。

請提供更多代碼,我可以通過更好的答案來更新。例如,你的myObj是什麼樣的?它的元素如何得到ok的值?在您撥打.each()的電話中似乎沒有設置。

+0

每個元素ID都是唯一的。如果我想檢查myObj.theid是否存在,並且它的值是「ok」,我將類「verify」添加到表單元素。 – Oseer

+1

這是不正確的。 * Ajax *調用默認是異步的,但純jQuery迭代回調不是。 – Dan

+0

只是爲了澄清 - 有些方法可以做Ajax之外的異步事物。例如,jQuery'延遲'或簡單的老'setTimeout' - 但'each'不是其中之一。 – Dan