使用jQuery UI创建可拖动按钮

18
我可以轻松地使一个
元素可拖动,但无法使

$(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>

在 JSFiddle 上查看

6个回答

58

这不是一个Bug,使用以下代码:$('input[type=button]').draggable({cancel:false}); ,你需要取消按钮默认的点击事件。


这也解决了我的问题。所以这确实是正确的答案。 - Terradon

9

我自己没有测试过,但我的直觉告诉我这可能与按钮的默认鼠标按下事件处理程序有关。您可以尝试在mousedown处理程序中使用event.preventDefault()进行实验。

或者,您可以将按钮包装在一个div中,然后通过 draggable() 来使其可拖动。


你不能拖动按钮,只能拖动 div。如果你在按钮的右边轻微点击,你会发现这一点。这意味着按钮上的事件处理程序肯定会干扰,所以你可能需要取消它。 - Bobby Jack

5
JQuery默认禁用以下元素的拖动:

  • inputtextareabuttonselectoption

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

对我来说,这是毫无必要的个人意见和讨厌的行为。但幸运的是,禁用它非常容易。只需调整cancel选项即可。例如,以下可拖动的初始化允许在除了.no-drag类之外的所有元素上开始拖动:

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

1

0

你可以使用CSS将一个div样式看起来像按钮。在这种情况下,这是我经常做的事情。


你可能能够让它工作,但请注意这并不理想,因为它的语义性要差得多,而且你还需要进行自定义事件处理等操作。更好的方法是解决实际问题。 - Bobby Jack
@Bobby:没错!但我仍然很感兴趣看看Taesung的实际做法。 - Randomblue

0
以下代码中,如果有cancel:false,则会取消默认的点击事件:
$( "#btn1 " ).draggable({
   appendTo: "body",
   helper: "clone",
  cancel:false
});

HTML 部分

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接