使用 jQuery UI 的可拖动按钮

Posted

技术标签:

【中文标题】使用 jQuery UI 的可拖动按钮【英文标题】:draggable button using jQuery UI 【发布时间】:2011-10-16 01:07:09 【问题描述】:

我可以轻松地使 <div> 元素可拖动,但不能使 <button> 元素。如何使<button> 也可拖动?

$(init);

function init() 
  $('#makeMeDraggable1').draggable();
  $('#makeMeDraggable2').draggable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.js"></script>

<div id="makeMeDraggable1">Drag me!</div>
<button id="makeMeDraggable1">Drag me!</button>

View at JSFiddle

【问题讨论】:

【参考方案1】:

它不是一个错误,使用这个,$('input[type=button]').draggable(cancel:false); 需要取消按钮的默认点击事件。

【讨论】:

这也解决了我的问题。所以这确实是正确的答案。【参考方案2】:

我自己没有对此进行过测试,但我有一种直觉,它与按钮的默认鼠标按下事件处理程序有关。您可能想在 mousedown 处理程序中试验 event.preventDefault()

或者,您可以将按钮包装在一个 div 中,然后 draggable()

【讨论】:

您不能拖动按钮,只能拖动 div:如果您稍微点击按钮右侧,您应该会看到。这表明按钮上的事件处理程序肯定会干扰,因此您可能需要取消它。【参考方案3】:

JQuery 默认禁止从以下元素开始拖动:

input, textarea, button, select, option

在此处查看当前规范:https://api.jqueryui.com/draggable/#option-cancel

这(对我来说)是不必要的固执己见和烦人。但幸运的是,它很容易禁用。只需调整cancel 选项。例如,以下可拖动初始化允许在除.no-drag 类之外的所有元素上开始拖动:

$ele.draggable(
    cancel : '.no-drag'
);

【讨论】:

【参考方案4】:

看起来这是一个 jquery ui 错误。

与另一个可拖动的插件一起工作:

http://jsfiddle.net/CkKgD/

我在这里找到了插件: http://devongovett.wordpress.com/2009/12/01/event-delegated-drag-and-drop-jquery-plugin/

首先我使用它是因为 jquery-ui draggable 中缺乏委托支持。

【讨论】:

【参考方案5】:

您可以使用 CSS 使 div 看起来像按钮。在这种情况下,我大部分时间都是这样做的。

【讨论】:

你也许可以让它工作,但请注意它并不理想,因为它的语义要少得多,你必须为它做自定义事件处理等。更好地修复实际问题 @Bobby:没错!但我仍然对现场观看 Taesung 的做法很感兴趣。【参考方案6】:

拥有cancel:false以下代码将取消默认点击事件:

$( "#btn1 " ).draggable(
   appendTo: "body",
   helper: "clone",
  cancel:false
);

html部分

<input type="submit" id="btn1" value="button">

【讨论】:

以上是关于使用 jQuery UI 的可拖动按钮的主要内容,如果未能解决你的问题,请参考以下文章

滚动浏览器时使用错误起始位置的可拖动 jQuery UI 元素?

jQuery UI:使用容差触摸放置对象时的可拖动行为

如何使用 jquery ui 可拖动突出显示悬停时的可放置​​区域

css 与jQuery Calendar和jQuery UI一起使用。这是css在日历上包含像对象一样的可拖动卡片

没有 jQuery UI(或根本没有 jQuery?)的可排序/可拖动列表项

jQuery UI 可拖动在我的可拖动 div 上设置“位置:相对”