【问题标题】:JQuery - droppable function only works for last element of contains selectorJQuery - droppable 函数仅适用于包含选择器的最后一个元素
【发布时间】:2012-09-13 11:45:22
【问题描述】:

我在使用属性 contains 选择器和 droppable fundtion 时遇到问题。 我正在搜索 id 包含字符串“dropAble”的 div 元素

$('div[id*="dragAble"]').draggable();
$('div[id*="dropAble"]').droppable( 
    {
        drop: handleDropEvent
    } 
);

我希望每个元素都对 drop 事件做出反应。我必须这样做,因为我使用的是 JSF,并且因为它替换了我的 div 的初始 id,所以我必须搜索这个子字符串。

drop 事件声明如下:

function handleDropEvent( event, ui ) {
    var draggable = ui.draggable;
    alert( 'The square with ID "' + draggable.attr('id') + '" was dropped onto me!' );
    alert( this );
}

首先,并不是所有这些元素都会对 drop 事件做出反应,只有前两个。此外,“this”始终是最后一个元素,因此它似乎覆盖了其他定义。

dropelement 的 html 部分如下所示:

<t:dataList value="#{bean.list}" var="elem">
<t:htmlTag value="li" styleClass="folder">
<t:div id="dropAble">
    ...
<:/div>
<t:htmlTag>

拖动元素的html部分如下所示:

<t:dataTable ...>
<t:column ...>
<h:outputText value="#{dok.text}&nbsp;" escape="false"  />
<t:div forceId="true" id="dragAble">
    Drag
</t:div>
</t:column>
</t:dataTable>

我希望能够确定移动了哪个拖动对象(工作正常)并确定拖动项目的放置位置(这似乎总是最后一个元素)。 由于 init 函数中的 draggable() 调用有效,我不明白为什么它不使用 droppable 函数。

还有其他方法可以做到这一点吗?我做错了什么?

感谢您的任何建议!

【问题讨论】:

  • 改用类。 &lt;div class="draggable"&gt; and &lt;div class="droppable"&gt; 然后在你的 js 中:$(".draggable").draggable(); $(".droppable").droppable().
  • 如果我使用类,我如何确定哪个元素被拖动,以及它被拖放到哪个元素?他们看起来不都一样吗?

标签: jquery jquery-ui jsf-1.2


【解决方案1】:

看这里:http://jqueryui.com/demos/droppable/ 和这里http://jqueryui.com/demos/draggable/ 您在 drop 处理程序中做的一切都是正确的。来自drop handler 上的 jQuery UI 文档:

当接受的可拖动对象被“over”放置时触发此事件 (在公差范围内)这个droppable。在回调中,$(this) 表示可拖放的可拖放对象。 ui.draggable 表示可拖动。

【讨论】:

  • 我会接受这个答案。实际上没有任何问题,除了我的可拖动 div 的宽度。我认为这取决于触发拖放事件的光标位置。但这实际上取决于元素本身的位置。谢谢你的建议
猜你喜欢
  • 2012-06-22
  • 2012-03-11
  • 2020-07-09
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多