所以你想要执行一个名字在字符串或变量中的函数:
var fn = "foobar";
function foobar() {
console.log('say something');
}
这样的答案 - How to execute a JavaScript function when I have its name as a string - 说要做到这一点:
window[fn](); // outputs 'say something'
但是...... 这个由于某种原因不起作用:
jQuery(document).ready(function($){
var fn = "foobar";
function foobar() {
console.log('say something');
}
window[fn](); // undefined
});
此有效:
jQuery(document).ready(function($){
var fn = "foobar";
window[fn](); // outputs 'say something'
});
/* I'm outside the ready handler */
function foobar() {
console.log('say something');
}
我希望将我的函数保留在那个就绪处理程序中,这样我就不必编写一堆匿名函数来将jQuery
定义为$
。我该怎么做?
以下是我想要做的事情:
<div data-control="toggleNext">FAQ</div>
<div>Here's some text that will be hidden until toggled</div>
JS:
jQuery(document).ready(function($){
function toggleNext() {
// add ".js_toggled" to .next() element
}
$('[data-control]').each(function(){
var fn = window[$(this).data('control')]; // <-- this don't werk
if (typeof fn === 'function') fn(this);
});
});
答案 0 :(得分:2)
如果你的函数在ready处理程序中,它将不会在window
上可用,除非你专门设置它。但是,无论如何,这只是一个坏主意,只需将window
从其中删除,并在您的doc ready块中定义您自己的对象。
jQuery(document).ready(function($){
var fn = "foobar", methods = {};
methods[fn] = function () {
console.log('say something');
}
$('[data-control]').each(function(){
var fn = methods[$(this).data('control')];
if (typeof fn === 'function') fn(this);
});
//methods[fn]();
});