2012-10-01 6 views
0

... 나는 승리 jQuery를 문이라고 생각했을 것 가지고 있지만 그것은 아무것도하지 않습니다 :내가 AJAX를 통해 양식을로드하고

$("#input_form_container").loadActionTemplate() 
          .find ('.form-focus:first').focus(); 

loadActionTemplate는 함수입니다 나는 폼을로드하기 위해 생성했습니다. 폼을로드 한 다음 연결을 계속할 수 있도록 "this"에 대한 참조를 반환합니다.

<input class="span1 form-focus" id="min-duration" name="min-duration" size="16" type="text"> 

참고 :

  • 내가 (템플릿이로드되고, 따라서 이후)이 스크립트를 실행로드 후에 내가 디버거로 갈 경우 타겟 요소는 다음과 같이 보이는 텍스트 입력 필드입니다 ("# 형식 _ 포커스 _ : 첫 번째"). 포커스(); " ..

    jQuery를 ("#의 input_form_container") loadActionTemplate() 발견 ('.form을 : 내가 입력하면 디버거에서 두 필드를 강조 표시하고

  • 체인 미래를위한 DOM 참조를 반환하여 매력처럼 작동 -focus : first '). focus();

    직접 디버거는 템플릿 리로드 오른쪽 DOM 요소에 대한 참조를 반환하지만 초점 I 포커스()를 호출하지만, 그 전에, 지연 (500)을 삽입 시도 필사적

  • 도달 NOT되고 필요하지 않아야하며 어쨌든 문제를 해결하지 못했습니다.

어떤 도움을 주시면 감사하겠습니다.

+1

A (동기) JAX! 'loadActionTemplate'의 소스는 무엇입니까? – Andreas

+0

흠. Ok 나는 아마 피곤하다. success() 메서드에 직접 연결하여 원하는 결과가 나오는지 살펴 보겠습니다. – ken

답변

1

@Andreas가 지적했듯이 AJAX는 결국 비동기식입니다. 나는 어떻게 든 구축 된 jQuery 체인이 AJAX 콜백의 success() 조건에서만 실행된다고 생각하면서 자신을 바보 취급했다. 왜 나는 수면 부족, 고품질의 카페인 및/또는 암페타민에 대한 접근성이 부족하다는 점만 지적 할 수 있다고 생각했습니다. 어쨌든, 솔루션을 공유하는 시도, 여기 내 "loadActionTemplate"jQuery를 확장이다 :

function LG_ServiceCall($service , $options , $callback); 

콜백 함수는 전달 :

$.fn.extend({ 
    // loadActionTemplate plugin 
    loadActionTemplate: function(options) { 
     //default settings 
     var defaults = { 
      actionDOM : '#do_something_dropdown', 
      cache : true 
     } 
     // store the "this" state for safe keeping 
     var domElements = $(this); 
     // merge user options into default 
     var options = $.extend(defaults, options); 
     // assign the "action" to an easily addressible variable 
     var action = $(options.actionDOM).val(); 
     // get the HTML form template for this action 
     LG_ServiceCall ('get-action-template' , {'action' : action} , function(r) { 
      var res = JSON.parse (r); 
      var template = res.results.template; 
      // iterate through all matched DOM instances 
      return domElements.each(function() { 
       // get handle on DOM object operating on 
       var element = $(this); 
       element.html(template); 
       element.find('.form-focus:first').focus(); 
      }) 
     }); 
     return domElements; // allows the function to operate in a chain 
    } 
}); 

너무 많은 고통스러운 세부 사항으로 이동하지 않고 LG_ServiceCall 방법은 세 가지 매개 변수를 AJAX.success() 메소드를 호출 할 때 세번째 파라미터로 불린다 :

requestObj.success = function (r) { 
    console.log ("Successful AJAX Call (" + JSON.stringify (r) + ")"); 
    callback (r); 
} 
관련 문제