3

我在使用thisjs 时遇到问题。我有一个这样使用的函数this

var refreshRequesterStar = function() {
    $(".rating").raty({
        score: function() { return $(this).attr('data-rating'); },
        readOnly: function() { return $(this).attr('data-readonly'); },
        halfShow: true
    });
};

评分 div 如下:

<div class="rating" data-readonly="false" data-rating="3.0" style="cursor: default; width: 100px;" title="not rated yet">
<div class="rating" data-readonly="false" data-rating="0.0" style="cursor: default; width: 100px;" title="not rated yet">

这是由这个函数调用的:

$("body").ajaxComplete(function(){
      refreshRequesterStar();
      $(".time_to_expire").each(function(){
            setCountDown(this);
      })
      $('select').chosen();
});

我能够设置得分值,但无法设置 readOnly 值。当我使用firebug进行调试时,我发现第一个this指向了div,而第二个this指向了window。我哪里错了?注意:我对 JavaScript 了解不多。

更多信息:我在 rails 上使用了 raty http://www.wbotelhos.com/raty

4

1 回答 1

3

文档和示例表明参数scorereadOnly应该是数字和布尔值,而不是回调函数。你可能想重写你的代码:

$(".rating").each(function() {
    // inside the function, this refers to the .rating element being iterated
    $(this).raty({
        score:    parseFloat($(this).attr('data-rating')), // see note #1
        readOnly: $(this).attr('data-readonly') == "true", // see note #2
        halfShow: true
    });
});
  1. .attr()返回一个字符串;parseFloat()函数用于将字符串"2.5"转换为数字2.5
  2. == "true"如果属性值等于"true";返回布尔值 true 在所有其他情况下返回 false

参考:

于 2012-06-22T07:53:34.717 回答