0

選択した値から星を初期化しました。

問題は、星をクリックすると、星全体の初期化が台無しになることです。

星を初期化するためのより良い、より一貫した方法で誰かが私を助けてくれれば幸いです。

星のコードはここにありますhttp://jsfiddle.net/wSMEc/6/

ありがとう

4

1 に答える 1

0

フォーカスの変更はユーザーが星をクリックしたときにのみ機能するため、初期化がどこで行われているかは実際にはわかりませんでした。フォーカス変更関数から値を取り出して、ready 関数に設定するのも良いと思います。

以下は機能しますが、いくつかの場所でさらにクリーンアップできます。評価システムを 1 ~ 5 つ星から 1 ~ 10 つ星に変更したり、その他のハードコーディングを回避したい場合に備えて、スロットを 5 に設定したくないかもしれません。

function init(value, slots) {
   vstring = value.toString();
   vlength = vstring.length;
   for (var i = 0; i < vlength; i++)
   {
      character = vstring.charAt(i);
      charNumber = slots - Number(character);
      rgroup = 'rating' + i;               
      $('input:radio[name='+rgroup+']')[charNumber].checked = true;  
   }
}

jQuery(document).ready(function() {
   var value   = 2123;
   var slots = 5;
   $('.rating').focus();
   init(value, slots);

   $('.rating').bind('focus change', function(event) {
   changed = event.target.id;
   var id_number = changed.split("star")[1] - 1;
   var row = Math.floor(id_number / slots);
   var col = id_number % slots;
   var stringValue = value.toString();

   stringValue = stringValue.substr(0, row) + col + stringValue.substr(row + 1);
   value = Number(stringValue);

   var rgroup = $(this).find("input:last").attr('name');
    alert(rgroup);

   $('input:radio[name='+rgroup+']')[value].checked = true;
});
于 2012-11-27T16:09:14.750 に答える