1

我在 IE10 中调试新的事件对象模型时遇到了麻烦。由于 Microsoft 更改了事件模型,为“touchstart”绑定的代码在遇到event.originalEvent.touches[0].target. 好的。但我无法检查他们的新 MSPointer 事件对象的属性以使其按自己的方式工作:出于某种原因,IE10[object Object]仅从.console.log"[object Object]"console.dir

为什么?(有人知道吗?)

我听说 console.log(JSON.stringify(obj)) 输出属性,它确实 - 除了事件对象,因为它们确实是函数。伟大的!

MSPointerDown这是我问题的症结所在:有没有人有关于在绑定触摸事件时如何调试事件属性的提示?有没有我必须在某处启用的设置才能记录有用的信息?

这是一些示例代码:

$('body').bind( ( window.navigator.msPointerEnabled ? "MSPointerDown" : "touchstart" ), function (event) {
        console.dir(event);
        // outputs "[object Object]" in IE10
 });

注意:我还尝试了来自书签的 Firebug Lite,但它不允许从我的远程 VM 输出脚本。

4

2 回答 2

1

我写了一个快速记录功能,在这里试试:

http://jsfiddle.net/V28zY/3/

JSFiddle 代码:

function ownKeys(obj) {

    var o = {};
    for (var key in obj) {
        o[key] = true;
    }
    try {
        Object.getOwnPropertyNames(obj).forEach(function (k) {
            o[k] = true;
        });
    } catch (e) {}
    var ret = [];
    for (var key in o) {
        ret.push(key);
    }
    return ret;
}

function logObject(obj, indent, seen) {
    var seen = seen || [];
    var indent = indent || 0;

    ownKeys(obj).slice(0, 50).sort().forEach(function (key) {
        var value = obj[key];


        if (Object(value) === value) {
            if (typeof value === "function") {
                console.log(Array(indent * 4 + 1).join(" ") + key, " = ", "[Function]");
            } else if (value.appendChild) {
                console.log(Array(indent * 4 + 1).join(" ") + key, " = ", "[DOMNode]");

            } else if (seen.indexOf(value) === -1 && value !== obj && value !== window) {
                console.log(Array(indent * 4 + 1).join(" ") + key + ":");
                seen.push(value);
                logObject(value, indent + 1, seen);
            } else {
                console.log(Array(indent * 4 + 1).join(" ") + key, " = ", "[Recursion]");
            }
        } else {
            console.log(Array(indent * 4 + 1).join(" ") + key, " = ", JSON.stringify(value));
        }
    });
}

$('body').bind((window.navigator.msPointerEnabled ? "MSPointerDown" : "touchstart"), function (event) {
    logObject(event);
});
于 2013-06-10T21:45:55.480 回答
0

我最终设置了一个断点并在 IE 中使用了调试工具。例如:

$('body').bind( ( window.navigator.msPointerEnabled ? "MSPointerDown" : "touchstart" ), function (event) {
    debugger;
});

然后在打开页面的 F12 开发人员工具中,转到脚本选项卡并单击“开始调试”。与页面交互以触发事件处理程序。代码应该在你的断点处停止;转到“Locals”选项卡并开始检查。从这里我可以看到事件对象中的所有属性等等。这是必需的,但这很愚蠢,但这就是我弄清楚事情的方式。

在此处输入图像描述

于 2013-06-12T17:29:17.760 回答