Call jQuery defined function via string

后端 未结 2 991
自闭症患者
自闭症患者 2021-01-05 00:43

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(doc         


        
相关标签:
2条回答
  • 2021-01-05 01:36

    The best way, if not Eval, would be to use setTimeout with zero milliseconds, as you can specify the function as a string.

    setTimeout('myfunction()',0,);
    
    0 讨论(0)
  • 2021-01-05 01:45

    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]();
        }
    
    });
    

    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]();
        }
    
    });
    
    0 讨论(0)
提交回复
热议问题