Javascript dispatchEvent未执行事件,但返回true

Javascript dispatchEvent未执行事件,但返回true,javascript,javascript-events,event-dispatching,Javascript,Javascript Events,Event Dispatching,在MDC的网站上,他们有一个在我的chrome 15中运行良好的浏览器 我试图获取一个事件对象并将其传递到dispatchEvent,并设置了将事件记录为数组然后重播它们的位置 本质上,我为单击设置了一个窗口侦听器,然后执行window.dispatchEvent(recordedEvent) 我无法确定为什么事件侦听器中的事件对象不会以与MDC示例中的initMouseEvent中的事件相同的方式执行 我并不是真的担心它会起作用,我想知道为什么它不起作用,在它似乎暗示它应该起作用之后;这是一个

在MDC的网站上,他们有一个在我的chrome 15中运行良好的浏览器

我试图获取一个事件对象并将其传递到dispatchEvent,并设置了将事件记录为数组然后重播它们的位置

本质上,我为单击设置了一个窗口侦听器,然后执行
window.dispatchEvent(recordedEvent)

我无法确定为什么事件侦听器中的事件对象不会以与MDC示例中的
initMouseEvent
中的事件相同的方式执行


我并不是真的担心它会起作用,我想知道为什么它不起作用,在它似乎暗示它应该起作用之后;这是一个更新

编辑-等待-您是否担心它返回
true
,就好像调用了“preventDefault()”一样?如果是这样,那么我现在理解你的困惑

最后编辑好,我想我看到问题了。分派事件时,始终从
窗口
分派。相反,如果你参与进来,那么它就会起作用

下面是一些很好的代码(在Firefox7中对我来说):

//我们正在使用的元素的变量
var replay=document.getElementById(“replay”);
var重放=假;
//将事件记录到数据数组中的处理程序。
变量处理程序=函数(e){
如果(重播){
console.log(“重播”+e.type);
}
else if(e.target.tagName.toLowerCase()!='input'){
返回;
}
否则{
push({elem:e.target,event:e});
log(handler.data);
}
};
handler.data=[];
//收听重播按钮上的单击
addEventListener(“单击”,函数(){
//删除侦听器,这样我们就不会创建一些疯狂的
//乌龟自始至终的无限悖论
//removeEventListener(“单击”,处理程序);
回放=真;
//清除文本框
var状态=[],obj;
//分派一组存储的事件

对于(var i=0;我很高兴我不是唯一一个从其行为方式上收回的人。您使用的是哪种浏览器?我似乎无法根据MDN示例获取单击事件以选中/取消选中框。请注意,MDN示例()以相反的方式解释状态值!换句话说,它认为
true
意味着没有名为“preventDefault()的处理程序”。哦,当你发送事件时,你可能应该从目标元素发送事件-我会将其添加到我的答案中。回答真棒,你让我走上了正确的轨道。它在FF中工作,现在我必须弄清楚为什么应该支持此功能的浏览器之间不一致。
//Vars for the elements we're working with
var replay = document.getElementById("replay");
var replaying = false;

//Handler to record events into a data array.
var handler = function (e) {
    if (replaying) {
        console.log("replay " + e.type);
    }
    else if (e.target.tagName.toLowerCase() !== 'input') {
        return;
            }
    else {
        handler.data.push({elem: e.target, event: e});
        console.log(handler.data);
    }
};
handler.data = [];

//Listen for the click on the replay button   
replay.addEventListener("click", function(){
    //Remove listeners so we don't create some crazy
    //infinite paradox with turtles all the way down
    // window.removeEventListener("click", handler);
    replaying = true;

    //Clear the textbox out
    var status = [], obj;
    //Dispatch a bunch of stored up events
    for (var i=0; i<handler.data.length;i++){
        obj = handler.data[i];
        status.push(obj.elem.dispatchEvent(obj.event));
    }
    console.log(status);
    replaying = false;
});

//Listen for some specific events
//window.addEventListener("keyup", handler);
window.addEventListener("click", handler);