Variable scope issue with javascript function

后端 未结 4 611
滥情空心
滥情空心 2021-01-17 02:43

I am trying to create a function with spin.js. The function loads the spinner, then if it is called again with it argument, then it stops the spinner. I can\'t get the varia

相关标签:
4条回答
  • 2021-01-17 02:48

    Why don't you return the Spinner object from the function, and let the caller call .stop() on it when its time? Reads better, and it doesn't have to pollute the local scope with random variables, also makes the submitSpinner() simpler.

    function createSubmitSpinner() {
    
        $('body').append('<div id="overlay"><div id="spinner"></div></div>');
    
        return new Spinner({
            lines: 13,
            length: 15,
            width: 5,
            radius: 20,
            color: '#ffffff',
            speed: 1,
            trail: 60,
            shadow: false
        }).spin(document.getElementById("spinner"));
    }
    
    
    $(function() {
        var spinner = createSubmitSpinner();
        $('#overlay').on('click', function() {
            alert('click');
            spinner.stop();
        });
    });
    
    0 讨论(0)
  • 2021-01-17 03:03
    submitSpinner(true);
    

    Because you have one overload in your scope so you must provide one.

    0 讨论(0)
  • 2021-01-17 03:13

    What is the problem? As you already know it is an scope issue, just move the variable declaration outside the function to make it global and accessible from all function calls.

    Yet, it might be better not to make it global, but move the stopping function (which is only called from the click handler) into the same scope:

    function createSpinner() {
        var overlay = $('<div id="overlay">'),
            spinner = $('<div id="spinner">');
        $('body').append(overlay.append(spinner));
        var submitSpinner = new Spinner({
            lines: 13,
            length: 15,
            width: 5,
            radius: 20,
            color: '#ffffff',
            speed: 1,
            trail: 60,
            shadow: false
        }).spin(spinner);
    
        overlay.on('click', function() {
            submitSpinner.stop();
            overlay.remove();
        });
    }
    
    $(function() {
        createSpinner();
    });
    
    0 讨论(0)
  • 2021-01-17 03:13

    Move "var theSubmitSpinner;" outside the function: http://jsfiddle.net/nXbaz/

    0 讨论(0)
提交回复
热议问题