【问题标题】:jqgrid column resize after manually width change手动宽度更改后jqgrid列调整大小
【发布时间】:2026-01-31 07:40:01
【问题描述】:

我有一个函数可以手动设置jqgrid 列的宽度。如果我在此之后想要使用调整大小句柄,它会从原始宽度大小中添加或减去相对值。所以它看不到我的新宽度作为基础。我尝试将widthwithOrg 放入colModel,但没有成功。

我有一个点击处理程序,我在其中将一列的大小调整为点击时的特定宽度。我设置了th trought JS 的宽度。在此之后,我希望能够使用 .ui-jqgrid-resize 元素来调整列的大小。

我的代码的简短版本,比如 th 是 200px 宽:

$('th').dblclick(function(){
   $(this).width('100px');
});

在用户双击后,th 的大小变小到100px,用户使用调整大小句柄来扩大th 10px。预期的结果是th110px 宽,但th 跳转到210px 宽。它添加了用户想要添加到原始状态的10px,而不是我通过双击设置的状态。

【问题讨论】:

  • “我手动设置 jqgrid 列的宽度”和“在此之后要使用调整大小句柄”是什么意思?你具体做什么,在什么情况下?您如何“手动设置列的宽度”?您是否编写了回调resizeStop 的代码并需要一些额外的信息?
  • 问题更新有帮助吗?
  • 抱歉,我还是不明白你的目标。您写道“我希望能够使用 .ui-jqgrid-resize 元素”。这不可能是你的目标。您可以随时“使用元素”,但您想实现什么?为什么你“设置th的宽度”? jqGrid 已经做到了。您希望另外在用户调整列大小后调整大小?
  • 手动重置列宽后,调整大小手柄的大小更改关闭。它不会根据当前(手动设置)宽度调整相对大小,而是根据我手动设置之前的宽度调整大小。假设宽度为100px,我手动将其更改为200px,向右拖动手柄10px将使列跳回110px宽,而不是210px。
  • 对不起,我不能关注你。您经常写“我手动设置它”,“我手动更改它”。我不明白你的意思。如果您是开发人员,那么用户 可以调整列宽,并且您可以编写一些额外的 JavaScript 代码,这些代码将在此之后执行。例如,您可以在 resizeStop 回调中编写代码。如果列大小是 100 像素,而用户明确将其增加到 110 像素,那么为什么要将其更改为 210 像素?我觉得这里没有意义。如果您将问题附加一些您使用的代码可能会更好地理解您。

标签: jqgrid


【解决方案1】:

我建议您使用我之前编写的插件中的setColWidth 方法(参见the answer)来更改网格列的宽度。您可以从github下载当前版本的插件。

如果您尝试根据列内容的宽度设置列的宽度,那么我建议您查看为the answer 创建的the demo 并阅读the answer。我不认为建议的代码是最终解决方案,但演示显示了我对问题的看法以及实现“自动宽度”功能的方法。

【讨论】:

  • 使用setColWidth 方法可以解决问题,你能解释一下为什么吗?是dragEnd吗?
  • @LaurensKling:正如我之前写给你的,需要更改 jqGrid 的许多内部结构来更改列宽。如果用户调整列的大小,则将调用树方法 dragStartdragMovedragEnddragEnd 使用一些属性作为输入(设置dragStartdragMove)。所以我只需填写相同的输入属性,然后通过this.grid 调用可访问的dragEnd(参见here)。这是我发现的最好方法。