Javascript 在IE9中为initMouseEvent()设置pageX

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

我正在编写一个JS方法来模拟dragAndDrop操作。这是为了测试一个基本上是滑块的插件。除了IE9之外,模拟动作在我想要测试的每个浏览器中都能工作

这就是方法

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);