为什么这个javascript不正确?

时间:2012-07-12 11:41:57

标签: javascript rubymine

我的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。这会检查javascript this在封闭时是否与外部上下文相同。

js在Chrome和IE9中运行良好。它在IE8中不起作用。

这是错的吗?有没有更好的方法来写这个?

2 个答案:

答案 0 :(得分:3)

RubyMine不知道$().each使用指定的this上下文执行传递的函数。如果您想避免该警告,请使用

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

您的代码无法与IE8一起使用的原因可能与此无关。但是为了更好的兼容性,使用jQuery包装的函数而不是本机API函数:$(this).attr而不是this.getAttribute(感谢@freakish)

答案 1 :(得分:1)

它提醒您注意警告您在JavaScript中使用this关键字时应小心谨慎,因为this始终引用函数所有者。

要了解详情,请参阅this article on quirksmode on the JavaScript this keyword