2012-07-12 4 views
1

내 IDE, RubyMine은,이 "잠재적으로 잘못된"입니다 말합니다.왜이 자바 스크립트가 올바르지 않습니까?

내 IDE가 var top_up_miles 라인, " this의 무효 가능성이 사용하는 자바 스크립트 this위한이 검사에 말한다
function update_top_up_prices_via_localStorage(){ 
    var index = localStorage.getItem("volxs"); 
    $('.product-inner').each(function(){ 

     var product = this.getAttribute('data-product-miles'); 
     var cpm = ((localStorage.getItem("cpm_by_volxs_"+product)).split(","))[index]; 

     $(this).find('table tbody tr td').each(function(){ 
      var top_up_miles = Number(this.getAttribute('data-topup-miles')); 
      var price = Number(top_up_miles * cpm * 1.06); 
      price = price.toFixed(2); 
      $(this).text('\u00A3'+price); 
     }) 
    }); 
} 

이 같이 폐쇄에 동일로 외부 상황.

JS는?이 쓰기 수있는 더 나은 방법이 있나요?

. 그것은 IE8에서 작동하지 않습니다. 크롬과 IE9에서 잘 작동이 잘못인가

+0

RubyMine에 대해 잘 모르지만 (사실 그게 뭔지는 모르겠지만) 코드는 다소 복잡해 보입니다. 순수한 JavaScript와 jQuery의 이상한 혼합. '$ (this) .attr ('data-topup-miles')'을 사용해보십시오. IE8에서 작동하지 않는다는 것은 무엇을 의미합니까? 오류가 있습니까? 잘못된 값 (IE8은 다른 브라우저에서'toFixed'를 다른 방식으로 처리하는 것 같습니다)? 또한 IE8에는 콘솔 ('F12')이 있습니다. 오류가 있는지 확인하십시오. 실제로 페이지를로드하기 전에 콘솔을 실행해야합니다. – freakish

답변

3

RubyMine은 $().each이 지정된 this 컨텍스트로 전달 된 함수를 실행한다는 것을 모릅니다. 당신이 그 경고를 피하려면,

$(/* ... */).each(function (i, elem) { 
    elem.getAttribute(/* ... */); 
}); 

을 사용하는 등

당신의 코드가 IE8에서 작동하지 않는 이유는 아마도 그와 아무 상관이있다

. 그러나 더 큰 호환성를 들어, 대신 네이티브 API 함수의 jQuery를 감싸 기능을 사용

1

그것은 당신이 자바 스크립트에서 this 키워드를 사용하여 조심해야한다는 경고에 관심을 그립니다 $(this).attr 대신 (감사 @freakish) this.getAttribute의로 this은 항상 함수 소유자를 나타냅니다.

자세한 내용은 this article on quirksmode on the JavaScript this keyword을 참조하십시오.

+0

당신은'Function.call' 또는'Function.apply'를 사용하여'this'를 명시 적으로 설정합니다. 이것은 jQuery가 여기에서하는 것입니다. –

+0

@OttoAllmendinger - 사실 일 수도 있지만 관련이 없습니다. IDE 경고에 대한 OP의 궁금증을 해결하기 만했습니다. 의견, 좋은 답변 주셔서 감사합니다 BTW Logged –

관련 문제