写在HTML属性里的函数名,要怎么调用呢?

时间:2022-09-29 21:12:56
比如以下代码

<script>
function a1(){
alert(1);
}
</script>
<div id='a' data-func='a1'></div>
<script>
var a2 = $("#a").data('func');
a2();
</script>

然后我获取到了div的data属性,调用的时候缺报错了。应该怎么用呢?

10 个解决方案

#1



eval(a2+"()");

#2


window[a2]();

eval(a2)();

#3


window[a2]();

#4


引用 2 楼 jslang 的回复:
window[a2]();

eval(a2)();

回复于: 2017-09-27 17:12:34 
发表于: 2017-09-27 17:46:06
穿越

#5


a2.call()

#6


引用 2 楼 jslang 的回复:
window[a2]();

eval(a2)();

感谢你的解答 但如果a1是个对象呢?就像下面这样的?

<script>
var a1 = {
function a3(){
alert(1);
}
}
</script>
<div id='a' data-func='a1.a3'></div>
<script>
var a2 = $("#a").data('func');
a2();
</script>

这样a2又该怎么调用呢?

#7


没看明白你这个是什么需求,函数的调用一般是触发性的。这样写没看出来有什么意义,明知道要调用那个函数为什么不直接写,要这样取值调用?
并且你这个都写错了var a1 = {a3:function(){alert(1)}}  直接调用   al.a3();

#8


引用 7 楼 u012418098 的回复:
没看明白你这个是什么需求,函数的调用一般是触发性的。这样写没看出来有什么意义,明知道要调用那个函数为什么不直接写,要这样取值调用?
并且你这个都写错了var a1 = {a3:function(){alert(1)}}  直接调用   al.a3();

是的 确实写错了 只是单纯复制进去了 太粗心了。。。
需求是 不知道载入哪个div 不同div对应不同事件 所以就把事件名称先写入div里 

#9


那可以做一个条件执行函数
多个div对应标记为f1,f2,f3,f4,f5......

switch(param){
case "f1":
//do sth 执行函数
break;
case "f2":
//......

}

#10


引用 6 楼 newbirdfindfood 的回复:
Quote: 引用 2 楼 jslang 的回复:

window[a2]();

eval(a2)();

感谢你的解答 但如果a1是个对象呢?就像下面这样的?

<script>
var a1 = {
function a3(){
alert(1);
}
}
</script>
<div id='a' data-func='a1.a3'></div>
<script>
var a2 = $("#a").data('func');
a2();
</script>

这样a2又该怎么调用呢?


<script>
var a1 = {
a3:function(){
alert(1);
}
}
</script>
<div id='a' data-func='a1.a3'></div>
<script>
var a2 = $("#a").data('func');
eval(a2)();//还是一样的

#1



eval(a2+"()");

#2


window[a2]();

eval(a2)();

#3


window[a2]();

#4


引用 2 楼 jslang 的回复:
window[a2]();

eval(a2)();

回复于: 2017-09-27 17:12:34 
发表于: 2017-09-27 17:46:06
穿越

#5


a2.call()

#6


引用 2 楼 jslang 的回复:
window[a2]();

eval(a2)();

感谢你的解答 但如果a1是个对象呢?就像下面这样的?

<script>
var a1 = {
function a3(){
alert(1);
}
}
</script>
<div id='a' data-func='a1.a3'></div>
<script>
var a2 = $("#a").data('func');
a2();
</script>

这样a2又该怎么调用呢?

#7


没看明白你这个是什么需求,函数的调用一般是触发性的。这样写没看出来有什么意义,明知道要调用那个函数为什么不直接写,要这样取值调用?
并且你这个都写错了var a1 = {a3:function(){alert(1)}}  直接调用   al.a3();

#8


引用 7 楼 u012418098 的回复:
没看明白你这个是什么需求,函数的调用一般是触发性的。这样写没看出来有什么意义,明知道要调用那个函数为什么不直接写,要这样取值调用?
并且你这个都写错了var a1 = {a3:function(){alert(1)}}  直接调用   al.a3();

是的 确实写错了 只是单纯复制进去了 太粗心了。。。
需求是 不知道载入哪个div 不同div对应不同事件 所以就把事件名称先写入div里 

#9


那可以做一个条件执行函数
多个div对应标记为f1,f2,f3,f4,f5......

switch(param){
case "f1":
//do sth 执行函数
break;
case "f2":
//......

}

#10


引用 6 楼 newbirdfindfood 的回复:
Quote: 引用 2 楼 jslang 的回复:

window[a2]();

eval(a2)();

感谢你的解答 但如果a1是个对象呢?就像下面这样的?

<script>
var a1 = {
function a3(){
alert(1);
}
}
</script>
<div id='a' data-func='a1.a3'></div>
<script>
var a2 = $("#a").data('func');
a2();
</script>

这样a2又该怎么调用呢?


<script>
var a1 = {
a3:function(){
alert(1);
}
}
</script>
<div id='a' data-func='a1.a3'></div>
<script>
var a2 = $("#a").data('func');
eval(a2)();//还是一样的