【问题标题】:jqGrid Radio Button select single rowjqGrid单选按钮选择单行
【发布时间】:2023-03-29 12:52:01
【问题描述】:

我的 JqGrid 每行都带有 RadioButton,就像这样。

  ...
 { 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 中选择单行时,即仅使用此功能选择的单选按钮:

  $(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);
       }
   });
 });

我正在获取网格中可用的所有行,而不是单个选定的行。

如果格式化程序是复选框,但不能用于收音机,则相同的功能效果很好。有什么遗漏吗?

更新:

   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");
            }
        });

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    在我看来,您当前来自$("#&lt;%=editButton.ClientID%&gt;").click 的代码太复杂了。你可以用更简单的方式做你需要的事情。

    首先,我建议您使用&lt;radio&gt; 按钮的name 属性,该属性取决于网格的ID(请参阅the answer)。可能是这样的

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

    您可以使用以下代码获取所选单选按钮的 id

    $("#<%=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,它证明了这一点:

    【讨论】:

    • 嗨奥列格,没有成功这一行没有执行 var $selRadio = $('input[name=radio_' + $table[0].id + ']:checked'), $tr;其中“table”是我的网格 ID。
    • @Samuel:你的意思是“这条线没有执行”?是否没有调用单击句柄,或者您在该行中遇到异常,或者$selRadio 始终返回length = 0 的对象?你用的是哪个formatter?您是否将option.gid 包含在单选按钮的name 中?您应该将我的演示与青春进行比较。我的演示是否在您的环境中工作?如果它有效,你应该找到你的代码的不同之处。
    • 嗨,奥列格,已经用你提到的更改更新了我的问题.. 抱歉没有描述完整的错误。在提到的行之后没有执行代码,没有异常,没有定义的值。我的意思是我只是在线路前后放置了一个简单的警报。
    • @Samuel:我不清楚您与 $("#&lt;%=editButton.ClientID%&gt;") 绑定的元素。在我的演示中,它是外部按钮,因为您没有描述您的情况。如果alert('M'); 不起作用,则您绑定到错误的 DOM 元素。您应该检查 Web 浏览器中的代码,以查看将在客户端生成哪些代码。
    • @Samuel:不客气!要获取单选按钮的值,您应该首先选择该项目。代码可以类似于$selRadio。如果您更喜欢另一个 API 来获取 HTML 片段 var radioHtml = mygrid.jqGrid('getCell', $tr.attr('id'), 'select');,那么您可以获取像 var $selRadio = $(radioHtml); 这样的 jQuery 对象。无论如何,您都可以使用$selRadio.val() 来获取值。
    【解决方案2】:

    像这样添加列

    { 
        label:' ',
        name:' ',
        index:"id",
        width:20,
        search: false,
        formatter: function radio(cellValue, option,) {
            return '<input type="radio" value = '+cellValue+' name="radio"  />';
        } 
    },
    
    $('#buttonid').button().click(function () {
        var $selRadio = $('input[name=radio]:radio:checked'), $tr;
    
        if ($selRadio.length > 0) {
            $tr = $selRadio.closest('tr');
    
            if ($tr.length > 0) {              
                var grid = $("#jqGrid");
                var row = $tr.attr('id');
                var role_desc = grid.jqGrid('getCell', row, 'colname');
            }
        }
    }
    

    jqGrid 是网格 ID,colname 为您的列名提供了它的工作我.....

    【讨论】:

      【解决方案3】:

      我需要一个更简单的解决方案,所以我想出了这种方法,它使用内置的多选而不是向网格中添加另一个列。

      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");
      },
      

      【讨论】:

        猜你喜欢
        • 2023-03-07
        • 2011-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        相关资源
        最近更新 更多