【问题标题】:How to force action buttons to appear in same row in jqgrid如何强制操作按钮出现在 jqgrid 的同一行中
【发布时间】:2011-11-05 05:25:10
【问题描述】:

使用下面的 colmodel 将操作按钮添加到 jqGrid 列。 列宽 45 足以容纳同一行中的两个按钮。 编辑和删除按钮出现在单独的行中,并且行高增加。 由于未知原因,两个按钮前都有空白,没有出现在列的左侧。

如果内联编辑开始,保存和取消按钮也会出现在单独的行中。

如何在增加列宽的情况下强制按钮出现在同一行?

grid.jqGrid({
  colModel: [{name:_actions,width:45,
  formatter:"actions",
  formatoptions:
    {keys:true}
}, ....

更新

工具栏包含按钮右侧的文本。从样式中删除 30px 会创建重叠按钮,因此我无法删除它。

根据我添加的 Oleg 建议

.ui-inline-edit, .ui-inline-del, .ui-inline-save, .ui-inline-cancel
{
    margin-right: 0px !important;
}

                colModel: [{"hidden":false,"label":" Muuda ","name":"_actions","width":($.browser.webkit == true? 58: 53)
,"align":"center","sortable":false,"formatter":"actions","formatoptions":{"keys":true,"delbutton":false,"onSuccess":function (jqXHR) {
actionresponse = jqXHR;
return true;
}
,"afterSave":function (rowID) {
cancelEditing($('#grid'));aftersavefunc(rowID,actionresponse)}
,"onError":errorfunc
,"extraparam":{"_dokdata":FormData
},"afterRestore":setFocusToGrid
,"onEdit":function (rowID) {
                            if (typeof (lastSelectedRow) !== 'undefined' && rowID !== lastSelectedRow)
                                       cancelEditing($('#grid'));
                           lastSelectedRow = rowID;
                                  }
}},

样式,但这不会改变任何东西,按钮仍然出现在两行中。如何解决?

更新 2

添加 fixed: true 将按钮放到同一行。 有两个问题:

按钮很小

列仅包含编辑按钮(使用了 delbutton:false 选项)。 编辑按钮宽度小,图标不居中。 如何将编辑按钮宽度增加到列宽 - 几个像素,以便单击列中的任意位置启动编辑模式并在列中心显示编辑图标? 如何增加保存广告取消按钮的宽度,使两者都占用 50%- 几个像素的操作列宽度?

多次快速点击会导致编辑按钮停止工作

保存按钮与编辑按钮出现在同一位置,保存到服务器需要一些时间。 如果快速单击此位置,则在保存完成之前切换内联编辑模式并且自动完成控件 不再创建。 之后,编辑按钮根本不起作用。 如何防止多次保存按钮点击:如果点击一次或其他解决方案禁用保存按钮或整个网格并显示“正在保存...”消息直到保存完成?

使用的样式:

td.ui-pg-button > div.ui-pg-div { margin-right: 30px } 

colmodel:

colModel: [{
fixed:true,
label:" Change ",
name:"_actions",
width:($.browser.webkit == true? 58: 53)
,align:"center",
sortable:false,
formatter:"actions",
formatoptions:{"keys":true,"delbutton":false,
  "onSuccess":function (jqXHR) {actionresponse = jqXHR;return true;}
  ,"afterSave":function (rowID) {
      cancelEditing($('#grid'));aftersavefunc(rowID,actionresponse);actionresponse=null; }
  ,"onError":errorfunc
  ,"extraparam":{"_dokdata":FormData
  },
afterRestore:setFocusToGrid
,onEdit:function (rowID) {
     if (typeof (lastSelectedRow) !== 'undefined' && rowID !== lastSelectedRow)
        cancelEditing($('#grid'));
     lastSelectedRow = rowID;
   }
}}

【问题讨论】:

  • 在您的演示(测试用例)中,我使用的设置仍未包含。您应该只跟踪您使用的样式或更新您的测试用例。

标签: jqgrid


【解决方案1】:

我发现formatter:"actions" 的列宽度为 45px,有点小。在我看来,53px 或 58px 看起来更好。计算如下:每个按钮都有 16px。将同时显示两个按钮。第二个按钮(删除或取消)有left-margin:5px。此外,所有按钮都将放置在具有margin-left: 8px; 的 div 内。如果你想在第二个按钮的右侧有相同的边距,总宽度应该是 8+16+5+16+8=53px。在使用 Webkit 浏览器的情况下,由于列宽的其他计算,它应该多 5px(计算将没有边距和填充,默认为 5px)。所以我建议你使用

width: ($.browser.webkit == true? 58: 53)

您存在主要问题是因为您在 CSS 中设置了 ui-pg-div 类的 margin-right:30px。我之所以能看到这一点,是因为您之前将演示页面的 URL 发给了我。

所有动作按钮都使用ui-pg-divui-inline-edit, ui-inline-del, ... 作为动作按钮。所以你必须:要么删除ui-pg-div类的margin-right:30px设置,要么覆盖ui-inline-editui-inline-delui-inline-saveui-inline-cancelui-inline-cancel附加属性的margin-right

【讨论】:

  • 谢谢。我实现了你所有的好建议,但按钮仍然出现在 IE 和 FireFox 中的 2 行中。我更新了 2 次答案并提供了代码。
  • @Andrus:我建议您使用td.ui-pg-button > div.ui-pg-div { margin-right: 30px } 而不是您当前使用的.ui-pg-div { margin-right: 30px },那么CSS 设置将不会影响操作按钮。
  • 谢谢。我尝试了这个设置,也完全删除了 ui-pg-div。按钮仍然出现在两行中。我在测试用例中更新了样式。
  • @Andrus:我在您的测试用例中的 IE9 中看到 一行 中的操作按钮。此外,我可以看到您没有使用fixed:true 作为列,因此您当前的width:65 设置将在我的显示器上显示为width: 47px;。我建议你使用fixed: true, width: ($.browser.webkit == true? 58: 53)
  • @Andrus:我可以调试问题,在我看来,您应该从input_autocomplete 函数中删除alert。情况如下。 combobox_element 中的 setTimeout 已执行,但 setTimeout 的主体可以在 保存内联编辑后运行。在没有autocomplete 的情况下,相应的输入字段工作,但这不是一个真正的问题。在setTimeout 的主体中,第一条语句($(newel).parent()... 什么都不做,因为newel 现在没有父级。var input = $("input", newel) 也是空的,input.length === 0
猜你喜欢
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多