評価のやつ(スターレイティングが一般的な名前?)が実装したかったのでjQuery Star Ratingを設置してみた。
これが、評価は高い割りにドキュメントがあまりなくて苦労したので、その記録を残す。
たぶん、こんなの設置するのなんてドキュメント要らずだろ?って話なんだろうけど。
これが、評価は高い割りにドキュメントがあまりなくて苦労したので、その記録を残す。
たぶん、こんなの設置するのなんてドキュメント要らずだろ?って話なんだろうけど。
まずCSSとJSのインクルード。
<link href="/css/starrating/jquery.rating.css" rel="stylesheet" type="text/css" />?1.3とかは僕の癖(キャッシュ対策)なので気にしないでください。要らないよ。
<script type="text/javascript" src="/js/jquery/jquery.js?1.3"></script>
<script type="text/javascript" src="/js/jquery/jquery.rating.pack.js?2.61"></script>
星の画像を好きなのにしたい人とか、画像の位置を変えたい人はCSS内の定義を編集すること。
で、ラジオボタンを配置する。
<input name="star1" type="radio" class="star1" value="1" />nameとclassは別の名前でもいいはずだけど理由がなければ合わせておいたほうがよろし。
<input name="star1" type="radio" class="star1" value="2" />
<input name="star1" type="radio" class="star1" value="3" />
<input name="star1" type="radio" class="star1" value="4" />
<input name="star1" type="radio" class="star1" value="5" />
class名は"star"とすると、これでもうラジオボタンが星に変わるはず。
最後に、起動スクリプトを仕込む。※prototypeを併用している関係でj$になってます。
j$('.star1').rating({cancel: 'Cancel', cancelValue: 0,
callback: function(value, link){
alert(value);
j$.ajax({
type: "POST",
url: "/hoge",
data:{
rating : value
},
success: function(xml){
if(j$(xml).find('IsValid').text() == "True"){
//TODO
}else{
//TODO
}
},
error: function(XMLHttpRequest, textStatus, errorThrown){
//TODO
},
complete: function(XMLHttpRequest, textStatus){
//nothing to do
}
});
}
});
j$('.star1').rating({cancel: 'Cancel', cancelValue:0);
だけでも☆に変わってくれる。cancelValue:0は、指定しないとキャンセルボタン(デフォルトで進入禁止マークみたいなやつ)を押したときに空文字が渡る。
で、callback以降ですが、ここが星を押したときに呼び出される処理で、僕はその値をDBに登録したいので.ajax発動してます。linkはよくわかんないんだけどvalueは押されたラジオボタンのvalueが飛んできます。
他にもいろいろあるけど(readonlyとか星の4分割とか)、自分的に一番汎用性が高くかつシンプルな使い方はこんなところじゃないだろうか。
コメントする