通过string调用jQuery定义的函数 [英] Call jQuery defined function via string

查看:86
本文介绍了通过string调用jQuery定义的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想调用我在jQuery的文档就绪函数中定义的函数,但是遇到了一些麻烦。我有以下代码:

I'd like to call functions I've defined within the document ready function of jQuery, but am having a bit of trouble. I have the following code:

jQuery(document).ready( function($) {

    function test1() {
        alert('test1');
    }

    function test2() {
        alert('test2');
    }

    var test_call = '2';

    var fn = 'test' + test_call;

    // use fn to call test2

});

我不想使用 eval 窗口[fn] 似乎不起作用。两个测试函数似乎不是窗口变量中的索引。我很感激帮助和知识。

I don't want to use eval, and window[fn] doesn't seem to be working. The two test functions don't appear to be indices in the window variable. I appreciate the help and knowledge.

推荐答案

所有我能想到的就是不使用 eval( )或某种形式的eval(将字符串传递给 setTimeout()是一种 eval()),是在对象上注册相关的函数名,然后在该对象上查找函数名:

All I can think of that doesn't use eval() or some form of eval (passing a string to setTimeout() is a form of eval()), is to register the relevant function names on an object and then look up the function name on that object:

jQuery(document).ready( function($) {

    function test1() {
        alert('test1');
    }

    function test2() {
        alert('test2');
    }

    // register functions on an object
    var funcList = {};
    funcList["test1"] = test1;
    funcList["test2"] = test2;


    var test_call = '2';

    var fn = 'test' + test_call;

    if (fn in funcList) {
        funcList[fn]();
    }

});

或者可以在函数定义中完成注册。如果它们是全局函数,它们将隐式注册在窗口对象上,但它们不是全局的,因为它们的作用域是document.ready处理函数:

or the registration could be done in the definition of the functions. If they were global functions, they would be implicitly registered on the window object, but these are not global as they are scoped inside the document.ready handler function:

jQuery(document).ready( function($) {

    var funcList = {};

    funcList.test1 = function test1() {
        alert('test1');
    }

    funcList.test2 = function test2() {
        alert('test2');
    }

    var test_call = '2';
    var fn = 'test' + test_call;

    if (fn in funcList) {
        funcList[fn]();
    }

});

或者,您可以将函数移动到全局范围,以便它们像窗口对象一样自动注册这个:

Or, you could move the functions to the global scope so they are automatically registered with the window object like this:

function test1() {
    alert('test1');
}

function test2() {
    alert('test2');
}

jQuery(document).ready( function($) {

    var test_call = '2';
    var fn = 'test' + test_call;

    if (fn in window) {
        window[fn]();
    }

});

这篇关于通过string调用jQuery定义的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆