2012-06-21 1 views
2

나는 다음과 같이 Fancybox 상자를 열 수있는 링크가 있습니다. Fancybox 도우미 함수 내에서 데이터 속성을 사용할 수있게하려고합니다. 아래 코드에서 $(this.element).data('id')을 사용해 보았습니다.액세스 "이"Fancybox 내부 옵션

helpers: { 
    title: { 
     type: 'over' 
    }, 
    buttons: { 
     position: 'bottom', 
     tpl: '<div id="fancybox-buttons"><ul> \ 
              <li class="button"><a class="test-btn" data-id="' + $(this.element).data('id') + '" href="#"></a></li> \ 
             </ul></div>' 
    } 
} 

그러나 작동하지 않습니다. 데이터 속성을 가져 오는 것은 항상 도우미 함수 내에서 undefined을 반환합니다. 어떻게 작동 시키나요?

답변

4

@ imagar는 대부분의 사람들에게 정상적으로 작동 할 수있는 훌륭한 솔루션을 제공했습니다. 그러나 Fancybox를 호출하는 데 사용 된 링크가 Ajax 요청을 통해 페이지에로드 되었기 때문에 그의 솔루션은 나에게 적합하지 않았습니다. 전역 변수를 선언 한 다음 $(this.element).data('id') 값을 Fancybox afterLoad 콜백의 전역 변수에 전달하여 해결했습니다.

afterLoad : function() { 
    my_global_var = $(this.element).data('id'); 
} 

그렇다면 헬퍼 옵션의 전역 변수를 간단하게 사용했습니다.

+0

해결책에주의하십시오. 단점은'my_global_var'는 여전히 첫 번째 요소에 대해'undefined '라는 것입니다. 그런 다음 첫 번째 요소의'$ (this.element) .data ('id')'값을 두 번째 요소에 적용하는 등의 작업을 수행합니다. – JFK

+0

@JFK 그게 처음에 생각한거야. 그러나이 문제는 아무런 문제없이 첫 번째 요소에도 적용됩니다. – John

+0

보지 않고도 믿기 어렵다;) – JFK

1

$(this.element).data('id')은 콜백을 바인딩 할 때 평가됩니다. this$.fancybox으로 전화하는 시점의 컨텍스트가됩니다.

팬시 박스를 앵커 태그에 바인딩하는 경우 이미 앵커 태그를 선택했습니다. 이 같은 것이 작동해야합니다 :

$('a.fancybox').each(funcion() { 
    var $a = $(this); 
    $a.fancybox({ tpl: "..." + $a.data('id') + "..." }); 
}); 
+0

답장을 보내 주신 Thx. 위의 솔루션을 적용하면 fancybox가 아닌 새 창에서 이미지가 열립니다. 어떤 제안? – John

+0

어딘가에 JavaScript 오류가있을 수 있습니다. Firebug를 설치하고 디버그하십시오. – meagar

+0

Firebug로 디버깅 중이며 JS 오류가 없습니다. 'each' 함수 내에서 fancybox 함수를 감싸는 순간, fancybox가 아닌 다른 창에서 이미지가 열립니다. – John

0

PHP로하는 것이 더 쉬울까요?

buttons : { 
position: 'bottom', 
tpl: '...<a class="test-btn" data-id="<?php echo $post->ID; ?>" href="#"></a>...' 
} 

문제는 당신이 콜백 기능에서 $(this.element)을 사용할 수 없다는 것입니다 ... 대신 템플릿 내에서 사용하려고합니다.

+0

- 실제로 이것은 PHP에서 할 수 있습니다. 그러나 그것은 PHP의 자바 스크립트 인라인을 만들 필요가 있습니다 (나는 그렇게하지 않습니다). Fancybox 콜백은 별도의 JS 파일 안에 있습니다. 전역 var를 사용하여이 문제를 해결했습니다. 내 대답을 보라. 입력에 감사드립니다. – John