2012-02-06 3 views
16

올바른 범위에서이 코드를 사용하지 않을지는 확실하지 않지만 기본적으로 링크 클릭을 캡처하여 링크 된 페이지로 이동하기 전에 페이지가 페이드 아웃되도록하는 스크립트가 있습니다. 그러나 링크가 클릭 인 경우 스크립트가 실패합니다. 여기 jQuery : this.attr() 함수가 아닌가요?

내 코드 : 당신, 내가 링크 온 클릭 속성이 있는지 확인하기 위해 검사를 할 노력하고있어 참조하고 온 클릭 함수를 호출 할 수 있습니다으로

<script type="text/javascript"> 

    pageObj = { 
     init: function(){ 
      $("body").fadeTo("slow", 1); 
     }, 
     redirectPage: function(redirect){ 
      window.location = redirect; 
     }, 
     linkLoad: function(location){ 
      $("body").fadeOut(1000, this.redirectPage(location)); 
     } 
    }; 

    $(document).ready(function() { 
     pageObj.init(); 

     $("a").click(function(e){ 
      e.preventDefault(); 
      if (this.attr('onclick') !== undefined) { 
       eval(this.attr('onclick').val()); 
      } else { 
       var location = this.href; 
       pageObj.linkLoad(location); 
      } 
     }); 
    }); 

</script> 


그것이 존재한다면. 이것을 어떻게 할 수 있습니까?

답변

4

은 (그것이 jQuery를 수집하는 방법이다 아닌 HTMLElement의), 당신은 단지뿐만 아니라 attr()를 건너 뛸 수 있습니다. HTML 문서로드가, 속성은 일반적으로 on_______ 속성이 방법으로 사전로드와 속성에 미리로드 할 때 나는 재산 (사용

$("a").click(function(e){ 
    var location; 
    e.preventDefault(); 
    if ($.isFunction(this.onclick)) { 
     this.onclick.call(this, e); 
    } else { 
     location = this.href; 
     pageObj.linkLoad(location); 
    } 
}); 

참고. 또한 내가 올바른 this에 대한 설정, eval()보다는 this.onclick.call()을 사용주의 onclick 메서드를 사용하고 이벤트 객체에 대한 액세스를 인자로 보장

+0

매력입니다. 매력적입니다. call()을 이해합니다. uld는 eval()보다 사용하는 것이 안전할까요? – chaoskreator

55

사용 :이 jQuery를의 맥락으로 강제 $(this).attr 대신

this.attr의. Diodeus 당신이 attr()을 사용하기 전에 jQuery를 컬렉션 this을 포장 할 필요가 올바른 동안

+1

나는이 방법도 사용할 수 있다고 생각했지만, $ (this) .attr ("onclick") .val은 함수가 아닙니다. – chaoskreator

+0

이 경우에는 .val()이 필요하지 않습니다. –

관련 문제