Javascript 在IE9中为initMouseEvent()设置pageX
我正在编写一个JS方法来模拟dragAndDrop操作。这是为了测试一个基本上是滑块的插件。除了IE9之外,模拟动作在我想要测试的每个浏览器中都能工作 这就是方法Javascript 在IE9中为initMouseEvent()设置pageX,javascript,internet-explorer-9,mouseevent,mousemove,Javascript,Internet Explorer 9,Mouseevent,Mousemove,我正在编写一个JS方法来模拟dragAndDrop操作。这是为了测试一个基本上是滑块的插件。除了IE9之外,模拟动作在我想要测试的每个浏览器中都能工作 这就是方法 function dragandDrop(id, className, clientX, clientY, distance){ var mousedown = document.createEvent("MouseEvent"), mouseup = document.createEvent("Mouse
function dragandDrop(id, className, clientX, clientY, distance){
var mousedown = document.createEvent("MouseEvent"),
mouseup = document.createEvent("MouseEvent"),
elem = document.getElementById(id),
result = [],
elems = elem.getElementsByTagName("*"),
k = 0,
i,
interval;
for(i in elems){
if ((" "+elems[i].className+" ").indexOf(" " + className + " ")>-1){
result.push(elems[i]);
}
}
mousedown.initMouseEvent("mousedown", true, true, window, 0, 0, 0, clientX, clientY, 0, 0, 0, 0, 0, null);
result[0].dispatchEvent(mousedown);
interval=setInterval(function(){
k++;
iter(k);
if(k===distance){
clearInterval(interval);
mouseup.initMouseEvent("mouseup", true, true, window, 0, clientX+k, clientY, 220+k, 400, 0, 0, 0, 0, 0, null);
result[0].dispatchEvent(mouseup);
}
},100);
function iter(y){
var mousemove=document.createEvent("MouseEvent");
mousemove.initMouseEvent("mousemove", true, true, window, 0, clientX+y, clientY, clientX+y, clientY, 0, 0, 0, 0, 0, null);
result[0].dispatchEvent(mousemove);
}
}
问题在于IE9中的initMouseEvent()没有设置pageX/Y值,这些值是只读的。它们可能总是等于clientX/Y值。该插件使用pageX/Y,所以我需要设置它们,以使测试在IE9中工作
我认为jQuery已经对此进行了修复,但我在源代码中找不到它。这太离谱了。但至少这是可以做到的
我只是不知道怎么做。我通过添加jQuery解决了这个问题,有时候很难找到最明显的答案
(function(selector, pageX, pageY, distance){
var $elem = $(selector),
k = 0,interval,
mousemove = $.Event("mousemove"),
mousedown = $.Event("mousedown");
mouseup = $.Event("mouseup");
mousedown.pageX = pageX;
mousedown.pageY = pageY;
$elem.trigger(mousedown);
interval = setInterval(function(){
k++;
moveMouse(k);
if(k === distance){
clearInterval(interval);
mouseup.pageX = pageX + k;
mouseup.pageY = pageY + k;
mouseup.screenX = pageX + k;
mouseup.screenY = pageY + k;
$elem.trigger(mouseup);}
},100);
function moveMouse(i){
mousemove.pageX = pageX + i;
mousemove.pageY = pageY;
$elem.trigger(mousemove);}
})(selector, offsetX, offsetY, x);