在函数声明而不是运行时分析所有变量
Parse all variables at function declaration instead of run-time
我想附加一个来自字符串的事件。我遇到的问题是,函数名不是作为字符串传入的,而是在调用函数时编译的,这会导致未定义的变量错误(temp)。
function someFun(arg) {
alert(arg) ;
}
temp[0] = "someFunc(test)" ;//this would be a sample of the incoming HTML
var x = 0 ;
while(temp[x] != '') {
temp[x] = temp[x].replace(')','').split('(') ;//remove paranthesis and separate func name from args
temp[x][1] = temp[x][1].split(',') ;//turn string of args into array
func = function() { window[temp[x][0]].apply(el,[]) ; }
el.addEventListener('click',func,false) ;
x++ ;
}
如果我不使用temp[x][0](应该是'someFunc'),而是直接为.apply方法传递一个字符串(在这种情况下是.apply('someFunc…)),我就没有问题了,函数将按预期用onClick调用。否则,当我点击元素el时,我会得到一个没有定义temp的错误。
我非常确信,如果在分配函数之前将temp[x][0]
分配给变量,它应该可以工作。像这样的
if (attributes._onClick) {
temp = attributes._onClick;
var x = 0;
while(temp[x] != '') {
var funcSig = temp[x].replace(')','').split('('); //remove paranthesis and separate func name from args
var funcName = funcSig[0];
var funcArgs = funcSig[1].split(','); //turn string of args into array
func = function() { window[funcName].apply(el,[]); }
el.addEventListener('click',function(){
window[funcName].apply(el,funcArgs); }
,false);
x++;
}
}
相关文章:
- 使用压缩的JavaScript文件(不是运行时压缩)
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- http.listen()在运行时接受终端命令
- 自定义运行时Can'在谷歌应用引擎中看不到我的自定义日志
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 变量在运行时未定义,但在使用调试器时定义
- Javascript - 加载函数运行时未定义的变量
- 在运行时使用预先确定的对象分配变量
- 如何使用仅在运行时已知的变量名称调用 JavaScript 函数
- 在函数声明而不是运行时分析所有变量
- 代码在shell中运行,但提供'可以't查找变量'从文件运行时出错
- 错误:AngularJs 变量未定义,当使用 grunt 运行时.(泽泽尔)
- 如何将变量保存到文件中,以便在下次站点运行时加载这些变量
- 为什么我的脚本停止运行时,我把一个变量在foreach和for循环
- 运行时在php HTML变量上运行javascript
- requirejs:我可以要求一个全局运行时变量吗?
- 流星:当模板变量改变时,重新运行代码
- JavaScript运行时错误:'变量'在检查是否未定义时未定义