Как использовать.setData/.getData при использовании.trigger('dragstart') в jQuery для функции перетаскивания в HTML5
При использовании.trigger ('dragstart') в jQuery для запуска функции элемента с атрибутом ondragstart="drag(event)", как вам.setData/.getData для перетаскивания HTML5 на сенсорном устройстве?**
Пример потока:
- Пользователь перетаскивает элемент с событием touchmove
- Элемент двух следующих атрибутов:
- .bind ('touchmove', function (event) {$ (this).trigger ('dragstart');});
- ondragstart = "перетаскивание (событие)"
- перетаскивание (событие) пытается использовать event.dataTransfer.setData("Текст", event.target.id);
- Результатом является следующая ошибка.
- "Uncaught TypeError: Невозможно прочитать свойство 'setData' из неопределенного"
Для события мыши ondragstart прекрасно работает вызов.setData/.getData в функции перетаскивания (событие). Однако при запуске ondragstart с помощью.trigger () методы.setData/.getData не работают должным образом, и возвращается ошибка
Почему я получаю следующую ошибку при попытке перетащить заказ; и как мне это исправить?**
"Uncaught TypeError: Невозможно прочитать свойство 'setData' из неопределенного"
Пожалуйста, воздержитесь от использования библиотеки.js, такой как TouchPunch и т. Д.
Я пытаюсь связать событие "touchmove", чтобы отключить перетаскивание (событие) и предоставить ту же функциональность.setData/.getData, которая доступна для события, инициируемого перетаскиванием мышью.
---> Ссылка jsFiddle <---
HTML:
<div class="l-col-container">
<section id="1130" class="orderqueue">
<h1>Order Queue</h1>
<div class="orderList">
<div id="100" class="order" timeslot="1130" ordernumber="100" draggable="true" ondragstart="drag(event)">
<div class="order-name">Johnny Cash</div>
<div class="order-num">Order Number: 100</div>
</div>
<!-- /order -->
<div id="101" class="order" timeslot="1130" ordernumber="101" draggable="true" ondragstart="drag(event);">
<div class="order-num">101</div>
<div class="order-name">Johnny Cash</div>
</div>
<!-- /order -->
</div>
<!-- /orderlist -->
</section>
<div class="queuebar">
<h2>Queue Bar</h2>
<hr/>
<div class="queuebar-dropzone"></div>
</div>
<div id="testsensor">
<h2>Test Log</h2>
<p id="testsensor-output"></p>
</div>
</div>
<!-- /l-col-container -->
JavaScript:
var orders = $('.order');
var testelement = document.getElementById('testsensor-output');
var index = 0;
orders.each(function () {
$(this).bind('touchmove', function (evt) {
index++;
testelement.innerHTML = index + ' dragstart fired';
console.log('dragstart fired');
$(this).trigger('dragstart');
});
$(this).bind('dragstart', function(event){
drag(event);
});
});
function drag(ev) {
console.log(ev);
var obj = $('#' + ev.target.id);
ev.dataTransfer.setData("Text", ev.target.id);
var data = ev.dataTransfer.getData("Text");
}
3 ответа
См. Jquery html 5 dragstart .on('dragstart',function(e){}) e.dataTransfer.setData() не работает
с использованием event.originalEvent.dataTransfer
делает трюк
Попробуй это
HTML
<div id="draggable" ></div>
CSS
#draggable {width:50px;height:50px;background-color:#f00;position:absolute}
HTML5 Touch Event Handlers
var draggable = document.getElementById('draggable');
draggable.addEventListener('touchmove', function(event) {
var touch = event.targetTouches[0];
// Place element where the finger is
draggable.style.left = touch.pageX-25 + 'px';
draggable.style.top = touch.pageY-25 + 'px';
event.preventDefault();
}, false);
Спасибо
То, что я пытался сделать здесь, невозможно. Я не могу вспомнить, где я нашел документацию, однако я пришел к выводу, что при настройке / получении данных с помощью метода перетаскивания HTML5 событие, которое вызывает.setData, во многом будет истинным перетаскиванием мышью для передачи данных. Другое событие не может вызвать событие перетаскивания и успешно.setData из-за ограничений безопасности.
Я могу ошибаться, но для тех, кто пытается сделать то же самое... Я предлагаю найти другой метод. Я лично переписал код, чтобы полностью удалить HTML5 перетаскивание из смеси. Это была несчастливая дорога.:D