当我手动触发可排序事件时,为什么UI对象为null?

时间:2012-03-28 13:06:24

标签: jquery jquery-ui-sortable

我正在编写一个页面,我想在可手动排序的事件上触发事件(即使用.trigger()方法)以更新名称&当用户进行不自动触发相应可排序事件的更改时,我需要绑定到表单的输入ID。我有两件事让我感到困惑,我希望能更好地理解是否有人知道并且愿意花时间。

第一点困惑:我遇到了一个问题,如果我在.sortable()方法中定义了事件,那么“manual”.trigger()方法没有做任何事情(而不是追加对.bind()的附加调用)。我找到了许多解释这种解决方法的帖子,但是如果这是一个功能或错误,我不清楚。

第二点困惑:当我手动触发事件时,“ui”对象为空。它是在事件正常触发时定义的。在我的应用程序中,我能够使用选择器来解决这个问题,因为我真正需要的是ui.item。但我很高兴知道是否有其他人遇到过此事,如果我做错了等等。

我建立了一个jsFiddle,展示了两个混乱点: http://jsfiddle.net/nanzalone/TDWXs/

第一个是“接收”事件。如果将项目从可拖动项拖动到可排序项,您将看到事件正常触发。但是按下“接收”按钮(调用.trigger())不会做任何事情。

第二个是“删除”事件。现在事件触发了,因为我使用了.bind(),但警报显示使用“删除”按钮触发事件会导致null ui对象,同时将项目拖入垃圾桶以触发删除会产生非null ui object。

提前感谢任何指针,并为我可能无意中犯下的任何失礼而道歉(我仍然是jQuery的新手)。

1 个答案:

答案 0 :(得分:1)

我认为ui是一个对象,用于确定与ui不相符的内容(例如丢弃的项目)。
如果以编程方式触发事件,则没有用户交互,因此没有ui对象。这是有道理的,它也是一种确定事件是否以编程方式触发的方式(对于您以this方式执行的正常事件) 在您的示例中,ui对象包含诸如接收对象的原始位置,实际位置等属性等。