Javascript代码仅在IE中不起作用

时间:2012-06-10 17:28:36

标签: javascript internet-explorer

我刚刚验证了我的javascript代码在IE以外的所有浏览器中都能正常运行。如何在Chrome,Safari中正确读取和执行脚本...但IE发现一些莫名其妙的错误并拒绝运行代码?

$(document).ready(function() {
        var NewsNavigator = {

            init: function(config) {
                this.news = config.news;
                this.newsNum = this.news.length;
                this.navbuttons = config.navbuttons;
                this.prevButton = config.prevButton;
                this.nextButton = config.nextButton;
                this.displayatonce = config.displayatonce;
                this.maxSteps = Math.ceil(this.newsNum / this.displayatonce);
                this.counter = 0;
                this.navigateNews();
                this.enableNav();
                this.checkButtonsVisibility();

            },

            showNews: function() {
                var start = this.counter * this.displayatonce;
                var end = this.counter * this.displayatonce + (this.displayatonce - 1);
                for (i=start; i<=end; i++) {
                    this.news.eq(i).show();
                }

            },

            hideAllNews: function() {
                console.log("hiding news");
                this.news.hide();
            },

            navigateNews: function() {
                this.hideAllNews();
                this.showNews();
            },

            checkButtonsVisibility: function() {
                if (this.counter <= 0)
                {
                    this.prevButton.css('visibility', 'hidden');
                }
                else
                {
                    this.prevButton.css('visibility', 'visible');
                }

                if (this.counter >= this.maxSteps - 1) 
                {
                    this.nextButton.css('visibility', 'hidden');
                }
                else
                {
                    this.nextButton.css('visibility', 'visible');
                }
            },

            enableNav: function() {
                self = this;
                this.navbuttons.on('click', function(event) {
                    if (($(this).data('dir') === 'prev') && (self.counter > 0)) {
                        self.counter--;
                        self.navigateNews();
                    } else if (($(this).data('dir') === 'next') && (self.counter < self.maxSteps - 1)) {
                        self.counter++;
                        self.navigateNews();
                    }
                self.checkButtonsVisibility();
                event.preventDefault(); 
                });
            }
        };

        NewsNavigator.init({
            news: $('div#cat-news').find('div.oneCol'),
            displayatonce: 3,
            navbuttons: $('div#nav').find('a'),
            prevButton: $('div#nav a.prec'),
            nextButton: $('div#nav a.succ')
        });
});

IE9中的错误消息

SCRIPT438: The object doesn't support the 'checkButtonsVisibility' property or method.
NewsNavigator.js, Row 69 Character 5

2 个答案:

答案 0 :(得分:3)

这归结为JavaScript的历史。

JavaScript是基于ECMAScript实现的:

http://en.wikipedia.org/wiki/ECMAScript

每个单独的Web浏览器提供商(Mozilla,Google,Microsoft)都认为他们不想标准化JavaScript,他们每个人都想出了自己的ECMAScript实现,因此他们自己的JavaScript引擎。

因此,我们程序员在尝试编写兼容所有这些不同JavaScript引擎的JavaScript时会头疼,因为他们每个人都以自己的方式阅读JavaScript(这解决了为什么IE发现一些莫名其妙的错误而其他人没有问题的问题)吨)

有趣的事实:只有Mozilla的ECMAScript实现实际上称为“JavaScript”。

您应该查找如何编写跨不同JavaScript引擎交叉兼容的JavaScript。

答案 1 :(得分:2)

使用javascript验证工具,例如JSLint,以确保最大程度的兼容性。这样,因为单个省略的字符(例如;'等)可能导致您的脚本无法在特定浏览器中运行。

JSLint还将提供有关如何提供和不提供更多兼容性的不同提示。