【发布时间】:2015-09-22 20:21:01
【问题描述】:
所以你想执行一个名字在字符串或变量中的函数:
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);
});
});
【问题讨论】:
-
如果您的函数在就绪处理程序中,除非您专门设置它,否则它将在窗口中不可用。但是,无论如何,这都是一个坏主意,只需将
window排除在外,然后在您的文档就绪块本地定义您自己的对象。 -
哦,你的意思是像
window[foobar] = function() {}?
标签: jquery anonymous-function document-ready