我有一个这样的事件:如何使用jQuery发布dragstart事件?
$(document).on('dragstart', '#' + gridID + ' tr.rgRow, #' + gridID + ' tr.rgAltRow ', function (ev) {
console.log(ev);
});
我想发出一个dragstart
事件,像这样:
$(".rgRow > td, .rgAltRow > td").filter(function() {
return $(this).text().trim() === "UTT000000899103";
}).parent().dragstart();
parent()
找到正确tr
,但dragstart
是不确定的。那么,我应该如何继续呢?
编辑:基于由A.沃尔夫我试图.parent().trigger('dragstart')
评论
,但我得到一个错误。现在,我尝试这样的:
$(document).on('dragstart', '#' + gridID + ' tr.rgRow, #' + gridID + ' tr.rgAltRow ', function (ev) {
console.log(ev);
var e = ev.originalEvent;
e.dataTransfer.effectAllowed = 'move';
});
和
$(".rgRow > td, .rgAltRow > td").filter(function() {
return $(this).text().trim() === "UTT000000899103";
}).parent().trigger("dragstart");
但我得到一个错误,因为ev.originalEvent.dataTransfer
是undefined
。所以我想知道我应该如何定义originalEvent
。
EDIT2:
我一直在试图与此代码:
$(".rgRow > td, .rgAltRow > td").filter(function() {
return $(this).text().trim() === "UTT000000899103";
}).parent()[0].dispatchEvent(new Event("dragstart"));
返回true
,但不运行在.on()
定义的处理程序。
EDIT3:
我设法打电话dispatchEvent()
将由处理器这样执行:
$(".rgRow > td, .rgAltRow > td").filter(function() {
return $(this).text().trim() === "UTT000000899103";
}).parent()[0].dispatchEvent(new CustomEvent("dragstart", {
bubbles: true,
dataTransfer: {}
}));
正是因为bubbles: true
执行。但是,错误是:
Uncaught TypeError: Cannot set property 'effectAllowed' of undefined
EDIT4:
基于A.沃尔夫的评论我曾尝试这样的代码:
var dragEvent = document.createEvent("HTMLEvents"); dragEvent.initEvent("dragstart", true, true);
dragEvent = $.extend(dragEvent, {dataTransfer: {effectAllowed: null}});
$(".rgRow > td, .rgAltRow > td").filter(function() { return $(this).text().trim() === "UTT000000899103"; }).parent().each(function(){ this.dispatchEvent(dragEvent); });
几乎解决了这个问题。难题的唯一缺少的部分是,我需要调用dataTransfer.setData
的处理程序中是这样的:
e.dataTransfer.setData('text', JSON.stringify(data));
其中data
是一个初始化的JSON。
'.parent()。trigger('dragstart')'?! –
@ A.Wolff,我已经试过了,并且出现了一个错误,我通过编辑问题来描述。 –
但是你的目标是什么?你能提供一个你正在寻找的具体样本吗? –