2011-12-18 25 views
1

私はこのように各行ごとにRadioButtonを持つJqGridを持っています。jqGridラジオボタン一行を選択

ラジオフォーマッタのための
... 
{ name: 'select', label: 'select', width: 50, formatter:radio} 

と機能:

function radio(value, options, rowObject){ 
    var radioHtml = '<input type="radio" value=' + value + ' name="radioid" />'; 
    return radioHtml; 
} 

私はjqgrid i.ee.からSINGLEROWを選択しようと、これだけの機能を使用して、選択されたラジオボタン:

$(function() { 
    $("#<%=editButton.ClientID%>").click(function() { 
     var ids = $("#table").jqGrid('getCol', 'select', true); 
     alert(ids) 
     for (var i = 0; i < ids.length; i++) { 
      //alert(ids[i].id) 
      if (ids[i].id != '') { 
       var idx = $("#table").jqGrid('getCell', ids[i].id, 'select'); 
      } 
      // alert(idx); 
     } 
    }); 
}); 

選択した単一の行ではなく、グリッド内のすべての行を使用可能にしています。

フォーマッタがチェックボックスで、ラジオでは機能しない場合、同じ機能がうまく機能します。何か不足していますか?

UPDATE:

colModel: [ 
        { name: 'select', label: 'select', width: 50, 
         formatter: function radio(cellValue, option) { 
          return '<input type="radio" name="radio_' + option.gid +  '" />'; 
         } 
        }, 
        { name: 'code', label: 'Branch Code', width: 250 }, 
        { name: 'name', label: 'Branch Name', width: 250 }, 
        { name: 'status', label: 'Group Status', width: 250 }, 
       ], 

機能クリックハンドラ:

 $("#<%=editButton.ClientID%>").click(function() { 
      alert('M'); 
      var $selRadio = $('input[name=radio_' + $table[0].id + ']:checked'), $tr; 
      alert('I'); 
      if ($selRadio.length > 0) { 
       $tr = $selRadio.closest('tr'); 
       if ($tr.length > 0) { 
        alert("The id of selected radio button is " + $tr.attr('id')); 
       } 
      } else { 
       alert("The radio button is not selected"); 
      } 
     }); 

答えて

3

$("#<%=editButton.ClientID%>").clickから、あなたの現在のコードが複雑すぎるように私には思えます。より簡単な方法で必要なことをすることができます。

まず、グリッドのIDに応じて<radio>ボタンのname属性を使用することをお勧めします(the answerを参照)。私が必要

enter image description here

+0

こんにちはオレグ、ノー成功このラインありえ実行するvar $ selRadio = $( '入力[名前= radio_' + $表は[0] .ID + ']:チェックする')、$ TR; "テーブル"は私のグリッドIDです。 –

+0

@サミュエル:「この行は実行されていません」という意味ですか?クリックハンドルが呼び出されないか、行内で例外が発生するか '$ selRadio'が常に' length' = 0のオブジェクトを返しますか?どのフォーマッターを使った?ラジオボタンの 'name'に' option.gid'を含めましたか?私のデモと若者を正確に比較する必要があります。私のデモはあなたの環境で使えますか?それが仕事であれば、あなたのコードとの違いを見つけてください。 – Oleg

+0

こんにちはオレグさん、あなたの言葉を変更して私の質問を更新しました。コードは、上記の行の後にno exception、noundefined valueの後に実行されません。私はちょうどラインの前後に簡単な警告を置いたということです。 –

-1

:それはあなたが次のコード

$("#<%=editButton.ClientID%>").button().click(function() { 
    var $selRadio = $('input[name=radio_' + $grid[0].id + ']:checked'), $tr; 
    if ($selRadio.length > 0) { 
     $tr = $selRadio.closest('tr'); 
     if ($tr.length > 0) { 
      alert("The id of selected radio button is " + $tr.attr('id')); 
     } 
    } else { 
     alert("The radio button is not selected"); 
    } 
}); 

これを実証the demoを参照して選択したラジオボタンのIDを取得することができ、次の

formatter: function (cellValue, option) { 
    return '<input type="radio" name="radio_' + option.gid + '" />'; 
} 

ようなことができより簡単な解決策ですので、グリッドにさらに別の列を追加するのではなく、組み込みのマルチ選択を使用するこの方法を考え出しました。

var gridSelector = $("#myGrid"); 

multiselect : true, 
beforeSelectRow: function(rowid, e) 
{ 
    $(gridSelector).jqGrid('resetSelection'); 
    return (true); 
}, 
beforeRequest : function() { 
    $('input[id=cb_myGrid]', 'div[id=jqgh_myGrid_cb]').remove(); 
}, 
loadComplete : function() { 
    $('input[id^="jqg_myGrid_"]').attr("type", "radio"); 
},