2011-10-03 24 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