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 の答え: 関数リテラルは文字列よりもはるかに優れています。コードを文字列でハッキングすることは、絶対に避けるべき恐怖です。またsetAttribute、IE との互換性のため (また、DOM レベル 1 の HTML プロパティの方が読みやすいため)、HTMLDocument で使用することはほとんどありません。

ただし、潜在的なトラップの 1 つ: これをループ内で行っているように見える場合、クロージャー ループの問題により、必要な動作が得られません。これは、別のクロージャーで解決できます。

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

または、ECMAScript 第 5 版機能を使用してよりクリーンに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 に答える