【问题标题】:Enable/Disable jQuery UI sortable at runtime via drag and drop (jsFiddle example)通过拖放在运行时启用/禁用可排序的 jQuery UI(jsFiddle 示例)
【发布时间】:2012-07-25 18:26:56
【问题描述】:

我有一个问题要问你们当中的 jQuery 大师。

场景

我正在构建一个网络应用程序,它(除其他外)允许用户在大桌子内对卡片进行排序。该表的一个特点是固定在表顶部的 bin,但同时“固定”到行上。它允许用户将卡片放置在与列相关联的 bin 中,而不是与行相关联。

这是一个stripped down jsFiddle example(制作起来很痛苦)来告诉你我的意思。

问题

问题是,如果您在表格中向下滚动一条路径,然后尝试将一张卡片从表格拖到垃圾箱中,它通常不起作用。取而代之的是,卡片被放置在用户看不到的垃圾箱“后面”的表格单元格中。希望这是有道理的。

问题和攻击计划

我认为解决此问题的最佳方法是在用户将鼠标悬停在 bin 上时以某种方式禁用除 bin 之外的所有表格中的单元格。这样卡片就一定会落入垃圾箱而不是垃圾箱后面的表格单元格中。

你同意吗?有没有更好的方法来解决这个问题?

备注

您可能会看到我的实现,并想知道我为什么要以这种方式实现事物。 (例如为什么我在 bin、顶行和左列中使用表格单元而不是 div。)不幸的是,我无法完全解释为什么我选择了我所做的实现,但我意识到我是在一个此示例未显示的约束数量。所以......我愿意接受有关如何改进布局的建议,但请不要用“好吧,你为什么不以这种 'this' 方式来回答这个问题然后你就不必处理这个问题了,因为你建议的设置很可能由于某种原因对我不起作用。

如果我需要澄清任何事情,请告诉我。非常感谢任何回答的人!

【问题讨论】:

  • @zod,我使用的是最新版本的 Chrome,但问题也出现在 Firefox 中(我什至懒得测试 IE :))。此外,请务必注意,您必须向下滚动才能看到问题。

标签: javascript jquery html jquery-ui jquery-ui-sortable


【解决方案1】:

这样可以(fiddle):

$('#binRow').mouseenter(function() {
    $('tr:not("#binRow") td.card-holder')
        .removeClass('card-holder')
        .addClass('disabled-card-holder');
}).mouseleave(function() {
    $('.disabled-card-holder')
        .removeClass('disabled-card-holder')
        .addClass('card-holder');
});​

【讨论】:

  • 感谢您的回答,马吉德!那真的很接近。但是,问题(我认为)是,当您单击垃圾箱内的卡片并将其拖到表格中时,垃圾箱的类仍设置为禁用,因此无法将卡片放入表格中。
  • 我更改了一些样式,以便您明白我的意思:持卡人有红色背景,而残疾人持卡人有灰色背景。一旦鼠标进入垃圾箱,其他持卡人将永远不会重新启用。这是小提琴:jsfiddle.net/aHKU5/286
  • 我在第二次回调中丢失了 .,我已修复,但仍然没有运气。我不知道是什么阻止了下排的掉落。固定点链接:jsfiddle.net/aHKU5/299/embedded/result
  • 是的,我在上次发表评论后也发现了这一点。我还在搞砸它。如果我解决了问题,我会发表评论。 +1 建议更改掉落类别并提供示例。感谢您的帮助!
  • 我能够通过检查每个容器的滚动位置使其正常工作:jsfiddle.net/aHKU5/310 再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 2014-01-08
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多