对于鼠标事件ondragstart,拖动(事件)函数中的.setData / .getData调用工作正常。但是,当通过.trigger()触发ondragstart时,.setData / .getData方法无法正常工作并返回错误
"未捕获的TypeError:无法读取属性' setData'未定义"
请不要指向使用TouchPunch等.js库。
我试图绑定' touchmove'触发拖动(事件)的事件,并提供可用于鼠标拖动触发事件的.setData / .getData功能。
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");
}
答案 0 :(得分:7)
请参阅jquery html 5 dragstart .on('dragstart',function(e){}) e.dataTransfer.setData() doesn't work
使用event.originalEvent.dataTransfer
可以解决问题
答案 1 :(得分:0)
试试这个
<div id="draggable" ></div>
#draggable {width:50px;height:50px;background-color:#f00;position:absolute}
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);
谢谢
答案 2 :(得分:0)
我在这里尝试做的事是不可能的。我无法记住我找到文档的位置,但是我得出的结论是,当通过HTML5拖放方法设置/获取数据时,触发.setData的事件很多都是真正的鼠标拖动以便传输数据。由于安全限制,另一个事件无法触发拖动事件并成功.setData。
我可能不正确,但对于其他尝试相同的人......我建议找另一种方法。我个人重写了代码以完全删除混合中的HTML5拖放。这是一条不愉快的道路。 :d