2011-10-03 3 views
0

나는 순서대로 몇 가지 일을하려하고 있는데, 나는 약간의 문제가있다. 그것은 자신의 개체 값을 (코드 참조)있어왔다 ".verify" 일부 jQuery 함수를 순서대로 실행하려고합니다. 콜백 문제입니까?

  • 이 클래스와 확실히 각 요소를 확인

    는 ID #sub_button로 버튼을 클릭
    1. , ...
    2. ...하지 않을 경우 , 그 요소를 블러 (일부 다른 코드를 실행하고 그것에 대한 객체를 생성합니다).
    3. 위의 IF 검사가 완료되면 (이제 모든 요소에 개체가 있어야 함) 함수 "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 
      
          } 
      
      } 
      
    4. 또한

    은 그것을 할 좋은 것 (모든 요소가 개체 값을 얻기 전에 "isitgood"기능은 흐림에서 수행되는, 실행) 함수의 모든 것을 지정하는 대신 모든 객체 값 == "ok"인지 확인하는 일종의 .each 루프. 객체의 모든 이름 (예 : login_id, email)은 클래스 이름 .verify가있는 요소의 ID 속성입니다.

    +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

    자바 스크립트가 비동기입니다. 귀하의 isitgood()은 항상 계속 작동되며, .each은 여전히 ​​작동합니다.

    그건 당신이 성취하려고하는 것이 명확하지 않다는 것을 당신의 코드에서 말했습니다. .each을 사용하는 방식은 태그에 동일한 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'delay' 나 일반 old'setTimeout' - 그러나'each'는 그들 중 하나가 아닙니다. – Dan

    관련 문제