我想将for循环中的函数名更改为类似的东西。
<script>
for (var x=1;x<10;x++){
function name_x(){
code
}
</script>
因此,使用名称name_1,name_2等生成了10个函数。
由于
编辑:
这就是我需要一个循环来创建5个函数id_1,id_2,id_3,id_4,id_5
<html>
<head>
<script>
function id_1(a){
var id = document.getElementById(a);
if (id.innerHTML==="innerHTML2"){
id.innerHTML="innerHTML1";
}
else if (id.innerHTML==="innerHTML1"){
id.innerHTML="innerHTML2";
}
}
</script>
</head>
<body>
<a id="id1" href="javascript:id_1('id')">innerHTML1</a>
<a id="id2" href="javascript:id_2('id')">innerHTML1</a>
<a id="id3" href="javascript:id_3('id')">innerHTML1</a>
<a id="id4" href="javascript:id_4('id')">innerHTML1</a>
<a id="id5" href="javascript:id_5('id')">innerHTML1</a>
</body>
</html>
答案 0 :(得分:3)
这看起来非常邪恶,但如果您在浏览器中,则可以使用window
作为全局对象。否则,定义一些对象以容纳方法:
var obj = {}, x;
for (x = 1; x < 10; x++) {
obj['name_' + x]() { /* code */ }
}
然后,您可以通过obj.name_1()
或obj['name_1']()
致电。
答案 1 :(得分:3)
您可以改为创建数组函数:
var fs = [];
for (var x = 1; x < 10; x++){
fs.push( function() {
/* code */
});
}
fs[1](); // call second function
您可以使用对象,但我不推荐它。
答案 2 :(得分:1)
由于您的代码应直接应用于您点击的链接,因此您可以使用this
传递对该链接的引用。此外,javascript代码需要放在onclick
中,而不是href
。如果您需要href
值才能使其显示为链接,则可以使用#
:
<a id="id1" href="#" onclick="javascript:swapContents(this);">innerHTML1</a>
然后你可以使用传入的参数作为对元素的引用(使用有意义的函数名称是一个很好的编程习惯,所以我将函数重命名为swapContents
):
function swapContents(el){
if (el.innerHTML === "innerHTML2"){
el.innerHTML = "innerHTML1";
} else if (el.innerHTML === "innerHTML1"){
el.innerHTML = "innerHTML2";
}
}
此外,根据HTML规范,所有元素都应具有唯一的id
值。如果您希望以某种方式对它们进行统一,请为它们指定相同的class
或name
或自定义属性:
<a id="id1" class="id" href="#" onclick="javascript:swapContents(this);">innerHTML1</a>
<a id="id2" class="id" href="#" onclick="javascript:swapContents(this);">innerHTML1</a>
<a id="id3" class="id" href="#" onclick="javascript:swapContents(this);">innerHTML1</a>
<a id="id4" class="id" href="#" onclick="javascript:swapContents(this);">innerHTML1</a>
<a id="id5" class="id" href="#" onclick="javascript:swapContents(this);">innerHTML1</a>