Перетаскиваемая кнопка с использованием jQuery UI

Я могу легко создать элемент <div> draggable, но не элемент <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>

Ответ 1

Я не тестировал это сам, но у меня есть интуиция, что он будет иметь какое-то отношение к обработчику событий по умолчанию для мыши. Возможно, вы захотите поэкспериментировать с событием .preventDefault() внутри обработчика mousedown.

В качестве альтернативы вы можете обернуть кнопку в div, после чего вы draggable().

Ответ 2

Это не ошибка, используйте это, $('input[type=button]').draggable({cancel:false}); Вам нужно отменить событие click по умолчанию для кнопки.

Ответ 3

JQuery отключает перетаскивание от запуска по следующим элементам по умолчанию:

  • input, textarea, button, select, option

См. текущую спецификацию здесь: https://api.jqueryui.com/draggable/#option-cancel

Это (для меня) излишне упрямый и раздражающий. Но, к счастью, его легко отключить. Просто отрегулируйте параметр cancel. Например, следующая перетаскиваемая инициализация позволяет начать перетаскивание всех элементов, кроме .no-drag classes:

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

Ответ 5

Вы можете сделать кнопку div похожим на кнопку с помощью CSS. Это то, что я делал большую часть времени в таких случаях.

Ответ 6

Имея cancel:false, следующий код отменит событие click по умолчанию:

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

Html часть

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