2012-01-25 8 views
0

内でクリックされたオプションのリンク、私はこのコードを持っている:ストア[OK]を選択し使用してjQueryの

$(function(){ 
    // TODO make this work 
    $('select#selList').change(function(){ 
     if($(this).val()=="alpha"||$(this).val()=="date"|$(this).val()=="nil") 
      $selectedValue=0; 
     else 
      $selectedValue=$(':selected').val();  

     $options=$('#selList').children('option'); 
     $arrVals=[]; 
     $options.each(function({ 
      if($(this).val()=="alpha"||$(this).val()=="date"|$(this).val()=="nil") 
      { 
      return true;  
      } 
          else 
           { 
            $arrVals.push({ 
             valx:$(this).val(), 
             txtx:$(this).text(), 
             datex:$(this).attr('date') 
            }); 
           } 

         }); 
         var sort_by = function(field, reverse, primer) 
         { 

          var key = function (x) {return primer ? primer(x[field]) : x[field]}; 

           return function (a,b) { 
             var A = key(a), B = key(b); 
             return ((A < B ? -1 :(A > B) ? +1 : 0)) * [-1,1][+!!reverse]; 
           } 
         } 

       switch($(':selected').attr('id')) 
       { 
        case 'alpha': 
         $arrVals.sort(sort_by('txtx',true,false)); 
        break; 

        case 'date': 
         $arrVals.sort(sort_by('datex',true,false)); 
        break; 

       } 

       $(this).html(""); 
       for(var i=0, m=$arrVals.length;i<m;i++) 
       { 
         $($options[i]).text($arrVals[i].txtx); 
         $(this).append($options[i]); 
       } 
       $(this).append('<option value="nil" id="nil">---------------------------</option><option value="alpha" id="alpha">Sort alphabeticaly</option><option value="date" id="date">Sort by date</option>') 
       $(this).val($selectedValue); 

      }); 
     }); 

私が望むすべては、それが「----」から延期場合は選択したオプションを保存することで、 "アルファベット順ソート"と "日付順ソート"オプションを選択して、現在の成功するクリックとリスト内のオプションの順番に合わせて選択してください。

次のようにHTMLがある:あなたの助けのための

<select id="selList" multiple style="height:150px"> 
     <option value="1" date="20120126">A</option> 
     <option value="2" date="20120124">D</option> 
     <option value="3" date="20120125">B</option> 
     <option value="4" date="20120129">C</option> 
     <option value="nil" id="nil">---------------------------</option> 
     <option value="alpha" id="alpha">Sort alphabeticaly</option> 
     <option value="date" id="date">Sort by date</option> 
    </select> 

感謝:)

+0

ここに保存しますか... –

+0

上記のコードを実行すると、たとえば「日付で並べ替え」をクリックすると、以前の値が選択解除されてリストが並べ替えられ、前のオプションが必要になります私はクリックしたことを思い出して、私はプラグインなしでそれをしたいと思います – Gabriel

答えて

1

それを試してみる:(既存の機能に機能-体を付加する)

$('#selList') 
    .change(function() 
      { 
      var col=$('option:selected',this) 
        .filter(function(){return !isNaN(this.value);}); 
       if(col.length) 
       { 
       $(this).data('selected',col); 
       } 
      } 
    ); 

Onchangeは、数値を持つ選択されたすべてのオプションを収集します。存在する場合は、このコレクションをデータとしてセレクト内に格納します。

関連する問題