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 を指していましたが、2 番目の this は window を指していました。どこが間違っていたのですか?注: JavaScript についてはよくわかりません。

詳細: 私はレーティ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 に答える