为什么我的onclick方法返回Slider未定义?

时间:2014-04-14 16:53:47

标签: javascript html

我有一个相当简单的javascript创建滑块,但onclick函数返回错误,我无法弄清楚原因。

http://jsfiddle.net/wxPWk/

var Slider = {
    content: ["text", "img"],
    current: 0,
    render: function(){
        view.innerHTML = this.content[this.current];
    },
    changeSlide: function(dir){
        if(dir) {
             this.current=0;

            return
        } else {
        this.current=1;
        }
        this.render();
    }
}

在HTML中我已经

<a onclick="Slider.changeSlide('back')"><</a> <a onclick="Slider.changeSlide()">></a>

但点击该链接我收到Slider is undefined错误。

2 个答案:

答案 0 :(得分:2)

您需要将JavaScript load参数设置为&#39; No wrap-in&#39;所以它可用:

http://jsfiddle.net/isherwood/wxPWk/2/

That raises other errors, unfortunately. 

答案 1 :(得分:1)

快速解决方法是在Slider之外声明window.onload并在window.onload中分配:

var Slider = {};

window.onload = function() {
    Slider = {
        changeSlide: ...
    }
}

更好的解决方案是在Isherwood提议的Slider之外定义window.onload。然后,您必须将独立的Slider.render()放在window.onload内。

var Slider = {
    ...
    changeSlide: function(dir) {
        if (dir) {
            this.current = 0;
        } else {
            this.current = 1;
        }
        this.render();
    }
}

window.onload = function() {
    Slider.render();
}

请注意,document.getElementById('slide')只会在HTML呈现后生成正确的div,因此您应该将view变量作为render函数的一部分:

var Slider = {
    content: ["text", "img"],
    current: 0,
    render: function() {
        var view = document.getElementById('slide');        
        view.innerHTML = this.content[this.current];
    }, ...
 }

或为view中的window.onload分配值。