后台:我正在尝试创建一个在单个页面中运行的在线应用程序。该页面将包含一个元素,当用户浏览应用程序时,我将在运行时更改其内容。我想在运行时加载东西以避免应用程序的大的初始加载时间。
问题:我一直在加载页面元素我认为我已经掌握了,但我无法解决如何加载JavaScript以与每个集合一起使用我加载元素时的元素。我认为我使用的是eval()
,但我遇到了一个问题 - 我收到如下错误:ReferenceError: testEval is not defined
,所以eval()
似乎没有加载函数,我期待它。下面的代码重现了这个问题。
我是否遗漏了有关如何使用eval的内容?还有其他选择吗?
我考虑在评估的脚本中创建一个对象,然后引用它以使用其功能并使用bind()
来设置事件处理。但是,我得到的印象是,我可能会不必要地过度复杂化(因为我倾向于)。此外,它还试图找出如何将函数添加到没有Object Constructor创建的对象(另一个函数,D'哦!)。
请帮忙。
function publiListElementLoad(result) {
testEval();
}
function publiListScriptLoad() {
eval("function testEval(){}");
}
publiListScriptLoad();
publiListElementLoad(result);
答案 0 :(得分:1)
您可以根据需要动态创建脚本标记以获取额外的JS:
var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= 'somefile.js';
head.appendChild(script);
答案 1 :(得分:0)
eval将在当前作用域中设置它,即publiListScriptLoad函数,并且您希望它在全局作用域中声明。
要解决这个问题,你可以将你的功能添加到窗口对象
工作版本:http://jsfiddle.net/y50xtf31/
function publiListElementLoad(result) {
testEval();
}
function publiListScriptLoad() {
eval("window.testEval = function() { alert('Hello World');}");
}
publiListScriptLoad();
publiListElementLoad("");
但要注意eval-function - 它是一个功能过于强大的功能,应该非常谨慎使用。