0

我希望保持跨浏览器的兼容性,并且这是迄今为止唯一的问题。

.setAttribute("onclick", "return showRapidText("+itemnum+");"); 

这很完美,但我想通过把它放在这个语法中使它与 IE 兼容

.onclick = new Function("fnDisplay_Computers('" + alines[i] + "')");

所以...我试过了

.onclick = new Function("showRapidText('" + itemnum + "')");

.onclick = new Function("return showRapidText('" + itemnum + "')");

还有大约 40 种其他方法,但没有任何效果

4

2 回答 2

3
element.onclick = function() {
    return showRapidText(itemnum);
};
于 2010-04-26T10:57:37.710 回答
1

+1 JP 的回答:函数文字比字符串要好得多。将字符串中的代码拼凑在一起是一种你应该不惜一切代价避免的恐怖。由于 IE 兼容性(并且因为 DOM Level 1 HTML 属性无论如何都更具可读性),也setAttribute几乎不应该在 HTMLDocument 中使用。

但是有一个潜在的陷阱:如果您在一个循环中执行此操作,看起来好像是这样,由于闭环问题,您将无法获得您想要的行为。你可以用另一个闭包来解决这个问题:

for (var i= 0; i<alines.length; i++) {
    elements[i].onclick= function(i) {
        return function() {
            fnDisplay_Computers(alines[i]);
        };
    }(i);
}

或更干净地使用 ECMAScript 第五版功能Function#bind

for (var i= 0; i<alines.length; i++) {
    elements[i].onclick= fnDisplay_Computers.bind(null, alines[i]);
}

将 Function#bind 添加到尚不支持它的浏览器。

于 2010-04-26T11:22:51.907 回答