1

私のIDEであるRubyMineは、これは「間違っている可能性がある」と言っています:

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);
        })
    });
}

私のIDEはvar top_up_miles、「の潜在的に無効な使用this。これにより、JavaScriptthisが外部コンテキストとクロージャーで同じであることを確認します。

js は Chrome と IE9 で正常に動作します。IE8 では動作しません。

これは間違っていますか?これを書く良い方法はありますか?

4

2 に答える 2

3

RubyMine は、指定されたコンテキスト$().eachで渡された関数を実行することを知りません。thisその警告を回避したい場合は、

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

コードが IE8 で動作しない理由は、おそらくそれとは何の関係もありません。ただし、互換性を高めるには、ネイティブ API 関数の代わりに jQuery でラップされた関数を使用してください。$(this).attr代わりにthis.getAttribute(thanks @freakish)

于 2012-07-12T11:46:31.007 に答える
1

これは、常に関数の所有者を指すため、thisJavaScript でのキーワードの使用には注意が必要であることを警告するために注意を引きます。this

詳細については、JavaScriptキーワードの quirksmode に関する記事をthis参照してください。

于 2012-07-12T11:48:28.780 に答える