【问题标题】:Why am I getting syntax error (JavaScript) trying to do a pagination?为什么尝试进行分页时出现语法错误 (JavaScript)?
【发布时间】:2011-10-13 09:21:49
【问题描述】:

为什么会出现语法错误?

$(document).ready(function() {
    $.post(some_url + "ajax/get_matching_products", {
        user_id : user_id_hash,
        url  : user_page_url
    }, function(data) {
        var callback = eval("(" + data + ")");
        //alert(callback.output);
        if(callback.result == 1) {
            $("#something").prepend(callback.output);
        }
    });


    /*
     * PAGINATION
     */
    $.fn.paginate = function(options) {
        var options = jQuery.extend({
             content: 'TBODY TR',
             limit: 20
        },options);

        return this.each(function() {

            var page = {};
            page.parent = $(this),
            page.content = (page.parent.is('TABLE')) ? page.parent.find(options.content) : page.parent.children(options.content),
            page.total = Math.ceil(page.content.size() / options.limit),
            page.display = page.content.css('display'),
            page.prev = 0,
            page.next = 2;

            page.content.slice(options.limit).css('display', 'none').addClass('ui-helper-hidden');

            $(document.createElement("DIV")).addClass("link-container")[(page.parent.is('TABLE')) ? 'insertAfter' : 'appendTo'](this);

            page.linkContainer = (page.parent.is('TABLE')) ? page.parent.next('.link-container:first') : page.parent.find('.link-container:first');

            $(document.createElement("A")).addClass("pagination-link previous ui-state-default").attr('href', 'previous').attr('title', 'Previous page').attr('rel', 'nofollow').text('<').appendTo(page.linkContainer);

            for(var num=0;  num < page.total;   num++){
                var offset = num + 1,
                      min = (offset * options.limit) - (options.limit),
                      max = (offset * options.limit);

                $(document.createElement("A")).addClass("pagination-link numeric ui-state-default").attr('href', offset).attr('title', 'Page '+offset+'').attr('rel', 'nofollow').text(offset).appendTo(page.linkContainer);

                page[offset] = page.content.slice(min, [max]);
            };

            $(document.createElement("A")).addClass("pagination-link next ui-state-default").attr('href', 'next').attr('title', 'Next page').attr('rel', 'nofollow').text('>').appendTo(page.linkContainer);

            page.wraps =  page.linkContainer.find('.paginationWrap');
            page.anchors = page.linkContainer.find('A');

            page.anchors.bind('mouseenter mouseleave', function(e){

                this.self = $(this);
                (e.type === 'mouseenter') ? this.self.addClass('ui-state-hover') : this.self.removeClass('ui-state-hover');
            }).eq(1).addClass('ui-state-active');

            page.anchors.bind('click', function(e){
                 e.preventDefault();

                 if($(this).is('.ui-state-active')){
                      return false;
                 }

                 this.siblings = $(this).siblings('.ui-state-active:first');

                 if($(this).is('.previous')) {

                      if(page.prev === 0){
                           return false;
                      };

                      this.link = $(this).siblings('A[href= ' + page.prev + ']');
                      this.link.add(this.siblings).toggleClass('ui-state-active');

                      page.content.css('display', 'none').addClass('ui-helper-hidden');
                      page[page.prev].css('display', page.display).removeClass('ui-helper-hidden');

                      page.prev--,
                      page.next--;

                  } else if($(this).is('.next')) {

                      if(page.next === (page.total + 1)){
                           return false;
                      };

                      this.link = $(this).siblings('A[href= ' + page.next + ']');
                      this.link.add(this.siblings).toggleClass('ui-state-active');

                      page.content.css('display', 'none').addClass('ui-helper-hidden');
                      page[page.next].css('display', page.display).removeClass('ui-helper-hidden');

                      page.prev++,
                      page.next++;

                 } else {

                      this.link = $(this);
                      this.link.add(this.siblings).toggleClass('ui-state-active');

                      this.offset = parseInt(this.link.attr('href'));

                      page.content.css('display', 'none').addClass('ui-helper-hidden');
                      page[this.offset].css('display', page.display).removeClass('ui-helper-hidden');

                      page.prev = this.offset - 1,
                      page.next = this.offset + 1;
                 }

            });
            return this;
        });
    };
});

这是否有助于发现错误?

JavaScript 错误:'clients/blabla/something/js/widget.js: (275): html 错误: 找不到脚本标签的结尾


Firebug 给出这个错误:

语法错误 $(函数());\n

如果我将虚拟/静态内容放到表格中,它同时拥有这两个部分效果很好,分页效果也很好。但是当它们在一起时,它给了我这个错误:/

【问题讨论】:

  • 请将代码剥离到相关部分,没有人会经历这一切。
  • 嗯,问题是我不知道问题出在哪里,那我该如何去掉呢?
  • 我已经放弃了格式化代码,第一段和第二段代码有一些不匹配的括号,其余的没有检查。
  • @adad1:注释掉代码的内部部分,直到不再有语法错误。这样,您就可以定位错误。
  • FireBug 通常表示错误所在的行。

标签: javascript jquery pagination


【解决方案1】:

应该已经阅读了更多的代码上下文,逗号在哪里是有效的。

var callback = eval("(" + data + ")");

数据的价值是什么?

【讨论】:

  • 接下来的五行也是如此。他们都有同样的错误。
  • 逗号是有效的 JavaScript 语句分隔符,不会引发语法错误。如果某个关键字跟在逗号后面,它只会抛出错误,例如returncontinuebreak 等。虽然,它通常只使用后面的块语句,例如iffor,而没有使用开/关大括号。
  • +1,我对eval() 的使用得出了相同的结论,但我注意到你已经编辑了你的答案:-)
【解决方案2】:

Put the text in the jslint page,你会得到答案。

【讨论】:

  • JSLint 没有显示错误,很可能是因为它发生在 eval() 语句中。
  • 如果我将虚拟/静态内容放到表格中,它拥有该部分也可以正常工作,分页也可以正常工作。但是当它们在一起时,它给了我这个错误:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
相关资源
最近更新 更多