2014-05-25 2 views
0

내 페이지에서 '필터'rel을 사용하여 모든 요소를 ​​찾고 js 객체에 추가하는 함수를 작성하려고합니다.자바 스크립트 함수는 작동하지만 정의되지 않은 함수를 반환합니다.

함수 내에서 console.log를 사용할 때 함수 자체가 잘 작동하는 것처럼 보이지만 어디에서나 함수를 호출하려고하면 정의되지 않은 값이 반환됩니다. 나는이 비동기 호출이있는 일반적인 문제입니다 실현,하지만 난 그였다 경우 여기 생각하지 않았다 : 다시

function getFilters() { 
jQuery(document).ready(function($) { 
    var filters = new Array(); 
    $("[rel=filter]").each(function(i,e){ 
     var type = $(e).attr('type'); 
     if(type == 'checkbox') { if($(e).is(':checked')) var val = $(e).prop('checked'); } 
     else if(type == 'radio') { if($(e).is(':checked')) var val = $(e).val(); } 
     else var val = $(e).val(); 
     if(val) filters.push({name : $(e).attr('name'), value : val}); 
    }); 
    return filters; 
}); 
} 

, 내가 CONSOLE.LOG를 실행 (필터); 리턴 필터 대신; 내 데이터가 괜찮아. 내가 그것을 반환하려고 할 때, 그것은 단지 정의되지 않은 결과를 가져온다. 어떤 도움이라도 대단히 감사합니다.

+1

함수에서 아무 것도 반환하지 않습니다. 당신은 jQuery 콜백에서 돌아오고 있습니다. – SLaks

+0

함수 내에 DOM 준비 콜백을 포함하지 말고 DOM 준비 콜백 내에서 함수를 호출해야합니다. – christian314159

+0

나는'ready' 콜백이 필요한 것을 완전히 알지 못한다고 생각합니다. https://learn.jquery.com/using-jquery-core/document-ready/를 참조하십시오. –

답변

4

getFilters()이 값을 반환 할 것으로 예상되는 경우 문제가됩니다. 모든 getFilters()는 이벤트 처리기를 등록합니다 (아무 것도 반환하지 않습니다).

당신은 아마 이런 식으로 뭔가를 원하는 :

function getFilters() { 
    var filters = new Array(); 
    $("[rel=filter]").each(function(i,e){ 
     var type = $(e).attr('type'); 
     if(type == 'checkbox') { if($(e).is(':checked')) var val = $(e).prop('checked'); } 
     else if(type == 'radio') { if($(e).is(':checked')) var val = $(e).val(); } 
     else var val = $(e).val(); 
     if(val) filters.push({name : $(e).attr('name'), value : val}); 
    }); 
    return filters; 
} 


$(document).ready(function() { 
    var filters = getFilters(); 
    // do something with filters 
}); 
+0

DOM 준비 콜백 외부에있는 것처럼 들리지만 내 문제는 설정 방법 때문입니다. 내 서류들. Annoyingly 내 함수가 내 DOM 준비 콜백과 다른 파일에있다. 그것은 (function ($) {}) (jQuery); 어렵 기 때문에 함수 자체 내에서 DOM 준비 콜백없이 jquery가 기본적으로 무시되는 것처럼 보입니다. 함수가 별도의 파일에있을 때이 문제를 해결할 수있는 방법이 있습니까? – DEUTSCHWULF

+0

네임 스페이스를 오염시키지 않으려면 전역 범위에서 getFilter()를 정의하기 만하면 어디에서나 호출 할 수 있습니다. 내 대답을 업데이트하여 첫 번째 줄과 마지막 줄을 지울 예정입니다. –

+0

고마워, 제임스! 나는 그것을하고 jQuery 함수에 $를 변경하고 지금은 작동하는 것 같다. – DEUTSCHWULF

0

문제는 그냥 단지 기능을 결합 ;, jQuery를 (문서) .ready (...)를 호출하기 때문에 함수 getFilters 실제로 아무 것도 반환하지 않는다는 것이다 나중에 실행하십시오. 필터를 반환하는 익명 함수는 실제로 페이지가 준비된 후에 호출되지만 getFilters 호출자는 반환 값을 사용하지 않습니다.

0

필터를 한 수준 위로 정의하거나 전역으로 설정해야합니다. 이제는 jQuery에 정의 된 함수에서 로컬이므로 getFilters에 표시되지 않습니다.

관련 문제