2012-07-03 6 views
0

함수로 가져올 필요가있는이 jQuery 객체가 있는데, 가능합니까? 코드 스 니펫을 참조하십시오.함수에 jQuery 객체를 가져 오는 방법은 무엇입니까?

var input; 
    jQuery('.upload').live('click', function() 
    { 
    input = jQuery(this).find(".image-path"); 
    tb_show(title, 'media-upload.php?type=image&TB_iframe=true'); 

    return false; 
    }); 

    window.send_to_editor = function(html) 
    { 
     if (input) 
     { 
       console.log(input); // works and defined at this point... 
       var data { 
       action: "doFunction" 
       }; 
       jQuery.post(ajaxurl, data, function(response) 
       { 
        console.log(input); // does not work, not defined...why?? 
        input.val(response); // this gives me input.val(response) is not a function 
       }); 
     } 
    } 
+0

html을 게시하십시오. – thecodeparadox

+0

일반적으로 jquery 객체를 전달하고 유지할 수 있습니다. 아마도 코드에 버그가있을 것입니다. –

+0

imageObj는 어디에 정의되어 있습니까? var imageObj로 만들면 괜찮을 수도 있습니다. –

답변

0

주요 편집 이제 영업 이익은 실제 코드를 공개했다고 :

문제는 input의 값이 업로드 버튼을 클릭하면 언젠가 나중에까지 설정되지 않은, 그러나 당신이 사용하려는 것입니다 그 전에 그 값, 따라서 그것은 아직 초기화되지 않았습니다. 코드를 다음과 같이 변경해야합니다.

jQuery('.upload').live('click', function() 
{ 
    var input = jQuery(this).find(".image-path"); 
    if (input.length) { 
     var data { 
      action: "doFunction" 
     } 
     jQuery.post(ajaxurl, data, function(response) { 
      input.val(response); // this gives me input.val(response) is not a function 
     }); 
    } 
    return false; 
}); 

HTML을 공개하지 않았기 때문에 jQuery가 HTML과 적절하게 일치하는지 아직 확실하지 않습니다. 현재 코드에서 클릭 한 버튼의 자식 인 class="image-path" 인 객체를 찾고 있습니다. 이것은 HTML의 약간 특이한 형태로, 귀하의 jQuery가 수정해야 할 또 다른 문제점 인 귀하의 HTML에 적합하지 않다고 의심하게 만듭니다.


OP 이전의 원래 대답은 실제 코드를 공개했습니다.

  1. 그것이 응답 콜백에서 사용할 수 있도록 imageObj가 적절한 범위에 정의되어 있는지 확인하십시오

    당신이해야 할 모든

    은 두 가지입니다.
  2. jQuery 개체가 .val() 메서드가있는 적절한 DOM 개체 유형으로 확인되는지 확인하십시오. 일반적으로 <input> 개체는 .val() 메서드가 작동하고 <input> 개체는 일반적으로 컨테이너 개체가 아니기 때문에이 문제는 적어도 문제의 일부라고 생각됩니다.

imageObj가 적절한 범위에서 선언되어 있는지 확인하는 방법은 두 가지가 있습니다 : 그것은 전역 변수로 사용할 수 있도록

  1. 세계적으로 그것을 선언 (일반적으로 권장되지 않음).
  2. 상위 범위에서 선언하므로 콜백 함수에서 사용할 수 있습니다. 다음은 상위 범위에서이를 선언하는 예제입니다.이처럼

:

function myFunc() { 

    var imageObj = jQuery(this).parents('.image-wrapper'); 

    var data = { 
    action: "doAjax" 
    }; 

    jQuery.post(ajaxURL, data, function(response) 
    { 
     imageObj.val(response); // this is undefined when run 
    }); 

} 

imageObj는 DOM 객체의 적절한 형태로 확인 있는지 확인하려면, 당신은 당신이 필요로하는 다음 imageObj.length 제로가 아닌 있는지 먼저 확인에 디버깅 코드를 추가 할 수 있습니다 class="image-wrapper"의 부모 개체가 실제로 메서드를 사용하는 <input> 개체인지 확인합니다. 입력 객체는 일반적으로 컨테이너 객체가 아니기 때문에 문제가 될 수 있습니다. 우리가 HTML을 보여 주었다면 더 구체적으로 조언 할 수 있습니다.

다음은 작동 예제입니다. http://jsfiddle.net/jfriend00/EJ8yu/

+0

imageObj가 myFunc의 범위에 있고 사용자 함수 내에서 사용하고 있기 때문에 이것이 작동하지 않는다는 것을 알았습니다. 콜백 .HTML을 표시하지 않았다. e는 무관하다. 어떤 태그라도 될 수있다 .... 아마도 나는이 질문을 너무 복잡하게 만들었다. jquery 객체가 외부에 선언 될 때 jquery 객체를 다른 함수로 가져 오는 방법을 물어야했다. –

+0

@ 릭 - 당신은 착각했습니다. 'imageObj'는 콜백 함수의 부모 범위에서 사용할 수 있습니다. 그것을 시도하십시오 - 그것은 작동합니다. 내가 당신에게 당신의 HTML에 대해 물어 본 이유는 당신이 잘못하고있는 것의 절반이 당신의 HTML과 관련되어 있기 때문입니다. – jfriend00

+0

다음은 잘 작동하는 예제입니다. http://jsfiddle.net/jfriend00/EJ8yu/. 콜백 내에서 사용할 수없는 유일한 것은 상위 범위의'this' 값입니다. – jfriend00

0

아마도 window 객체에 imageObj를 정의하지 않아도됩니다. 함수 블록에서 정의를 호출한다고 가정합니다.

이 바이올린은 작동하는지 보여줍니다 http://jsfiddle.net/dystroy/fDd7P/

var imageObj = jQuery(".image"); // pulls <img src="#" class="image" /> 

function custom() { 
console.log(imageObj.attr('src')); // and this would be undefined. 
} 

custom(); // logs '#', type F12 to see it 

당신이 $(window).load(... 블록에 var imageObj = jQuery(".image");을 작성하는 경우,이 시점에서 var을 제거해야하고 그것을 만들기 위해 $(window).load(... 전에 var imageObj;을 선언 글로벌.

관련 문제