gpt4 book ai didi

javascript - 动态调用函数javascript

转载 作者:行者123 更新时间:2023-12-02 19:58:54 25 4
gpt4 key购买 nike

我想要做的是将我所有的 JavaScript 从页面中分离出来,这样它适用于所有禁用的 JavaScript,而且还能够使用闭包编译器的高级编译(http://closure-compiler.appspot)来编译它。 com/home)。

我是这样开始的:

来自...

<a href="javascript:doMultiple('download', 'release');">Create archive</a>

到...

<a class="javascript doMultiple download release" href="ca.php">CreateArchive</a>

然后我循环所有对象以查找首先具有 javascript 类的对象,等等:(links 是 a 标签的数组)

for (i = 0; i < links.length; i = i + 1) {
if (links[i].className.substr(0, 10) === "javascript") {
jsArray = links[i].className.split(" ");
links[i].style.display = "inline";
if (links[i].addEventListener) {
links[i].addEventListener("click", window[jsArray[1]], false);
} else {
links[i].onclick = window[jsArray[1]];
}
links[i].href = "#";
}
}

使用此方法,JavaScript 压缩器将删除函数 doMultiple,因为它未使用,因为它不知道我有一个具有该功能的类...

我的问题是,我该如何解决这个问题,如果我不能,我可以以某种方式摆脱 window[jsArray[1]] 并以另一种方式解决这个问题吗?因为我认为这不是最好的方法。

一个类也可以是:

<a class="javascript popUp register.php 350 300" href="register.php">Register</a>

所以我想使用这个方法来动态添加所有 JavaScript。

最诚挚的问候,
约翰·斯文森

最佳答案

您不需要让事情变得复杂。最好将事件附加到 DOM 元素。

我强烈建议您使用像 jQuery 这样的 JavaScript 框架,甚至您可以使用纯 JavaScript 来实现这一点。

例如

<a href="#" id="createArchive" class="remove otherClass">Create archive</a>

或者

<a href="#" id="createArchive" class="release otherClass">Create archive</a>

对于 JavaScript:

var element = document.getElementById("createArchive");

var handler = function() {
// this line will execute only on IE
// you need an if-else case to test
// against the browser other than IE
// and use this.class.split
var classes = this.className.split(' ');

doMultiple('download', classes[0]);
// or anything you want to on this click event
};

if (element && element.attachEvent) {
// This is for IE
element.attachEvent("onclick", handler);
}
else if (element && element.addEventListener) {
// This is for rest of the world
element.addEventListener("click", handler, false);
}

如果你使用 jQuery,生活就很简单

$("#createArchive").bind("click", function() {
doMultiple('download', 'release');
});

就是这样,还要注意 HTML 中没有 JavaScript 代码。

问题 2

对于 Google Closure 编译器,您必须使用排除您不想编译/缩小的函数。

您应该有一个 .JS 文件,其中包含要排除的函数名称。

您的 exclude.js 应包含以下函数的签名:

function doMultiple() { }
function popUp() { }

并从命令行运行它以使用闭包编译器进行编译

java -jar .\compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js input_script_file.js --js_output_file=compiled.min.js --externs exclude.js

希望这有帮助。 请随时提出任何问题

关于javascript - 动态调用函数javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8243347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com