2012-07-23 3 views
1

나는 양식 유효성 검사 기능을하고하고있는 다음 코드 문제는 그것이JQuery와 플러그인과 폐쇄는

(function ($) { 
    $.fn.validate_thing = function (success_call_back) { 
     var call_back = true; 
     debugger; 
     if (!this.is('form')) { 
      return false; 
     } 

     $('input.empty').each(function() { 
      if(!$(this).text()) { 
       alert($(this).attr('name')); 
       call_back = false; 
      } 
     }); 
    } 
})(jQuery); 

에 그 페이지가로드 나는 '객체가 함수가 아닙니다'라고 말하는 자바 스크립트 오류가 발생하는 경우 (jQuery) 줄에. 디버거로이 단계를 거치면이 문제가 발생하지 않습니다. 이것을 문서 준비 함수에 넣으면이 문제가 발생하지 않습니다. 나는이 스크립트로로드되지 않는 jQuery와 관련이있을 것이라고 생각하지만이 코드를 포함하는 라이브러리 앞에 jQuery 라이브러리를 포함시킨다. 클로저에서 이것을하지 않는다면 언급 할 필요도 없다. ie do this

$.fn.validate_thing = function (success_call_back) { 
    var call_back = true; 
    debugger; 
    if (!this.is('form')) { 
     return false; 
    } 

    $('input.empty').each(function() { 
     if(!$(this).text()) { 
      alert($(this).attr('name')); 
      call_back = false; 
     } 
    }); 
} 

작동합니다.

그래서이 문제에 대해서는 몇 가지 해결 방법이 있지만이 문제의 원인을 알고 싶습니다. 미리 감사드립니다.

여기 당신이 마지막 줄에서 오류가 발생하면 내가 자바 스크립트 페이지

engine = new function() { 
this.request = function (params) { 
    var data = params.data ? params.data : ''; 

    if (params.url) { 
     var url = params.url; 
     var page = document.URL.split('/').pop(); 
     var page = page.split('.')[0]; 
     data += 'content_page='+page+'.tpl'; 
    } 
    else { 
     var url = document.URL; 
    } 

    debugger; 
    if (params.action) { 
     data += data ? '&action='+params.action : "action="+params.action; 
    } 

    $.ajax({ 
     url : url, 
     type : 'POST', 
     data : data, 
     dataType: 'json', 
     success : function(data) { 
      debugger; 
      if (data && data.partials) { 
       for (var key in data.partials) { 
        var element = data.partials[key]; 
        $('#'+element.partial_name).replaceWith(element.partial_content); 
       } 
      } 
     }, 
     error : function (jqXHR, textStatus, errorThrown) { 
      debugger; 

      alert('ajax error: '+errorThrown); 
     } 
    }).success(params.success); 
} 
} 
+0

그 부분 앞에 다른 코드가 있습니까? 마지막 줄에서 오류가 발생하면 코드 앞의 무엇이든지 함수 호출로 괄호'(function() {...})을 해석 할 수 있습니다 (필자는 이것이 길다는 것을 인정합니다). –

+0

'(function ($) {}) (jQuery);'는 함수를 실행하고'jQuery' 객체를 전달한다. 당신이하고있는 일을 위해 엔클로저가 필요 없다고 생각합니다. – MrOBrian

+0

@MrOBrian : jQuery 플러그인을 정의 할 때 이렇게하는 것이 일반적입니다. 전역'$'은 jQuery를 참조하지 않을 수도 있습니다. –

답변

0

에 전에 무엇을, 자바 스크립트 무엇이든의 코드를 앞에 함수 호출로 괄호 (function() { ... }) 해석 가능성이 높습니다. 이전 행에서 세미콜론을 잊어 버린 경우에 발생할 수 있습니다. 세미콜론이 foo 실종되고, 따라서 자바 스크립트 오류를 ​​

객체를 throw foo(...) 같은 코드가 해석하는

var foo = {}; 
var bar = foo 
(function() { 

}()); 

주 기능

되지 않습니다

이 고려

관련 문제