2010-10-25 7 views
19

Xin chào tất cả mọi người :) Tôi xin lỗi vì đã liệt kê mã dài, nhưng tôi không chắc chính xác nơi tôi đang sửa lỗi ở đây. Tôi đang viết một plugin jquery chỉ sử dụng nội bộ để chỉnh sửa danh sách điều khiển truy cập.jqGrid ném "Lỗi cú pháp không bắt buộc, biểu thức không được công nhận: #"

Một thành phần của trình soạn thảo ACL là plugin jqGrid, là một triển khai lưới tuyệt vời, đi kèm với các cơ sở tải AJAX của riêng nó và như vậy. Tôi đã sử dụng thành phần này trước đây, nhưng tôi chưa bao giờ cố gắng sử dụng nó như là một thành phần con của một plugin trước đây. Yêu cầu AJAX đang được gửi đi chính xác (từ những gì tôi thấy trong trình gỡ rối của Chrome), điều này khiến tôi tin rằng lỗi này không nằm trong mã của tôi, nhưng tôi không chắc chắn nên làm gì vào thời điểm này.

Tôi xin lỗi vì số lượng lớn mã, nhưng đây là ví dụ tối thiểu tôi có thể nghĩ đến.

/*global jQuery*/ 
"use strict"; /* Enable ECMAScript 5 Strict Mode if supported */ 
(function ($) { 
    var methods, defaults; 

    methods = { 
     init: function (options) { 
      var sid, pager, enumerateUrl; 
      if (this.data('isAclEditor')) { 
       $.error('The targeted element is already an ACL Editor.'); 
      } else { 
       this.data('isAclEditor', true); 
      } 
      this.data('options', $.extend(true, {}, defaults, options)); 
      /* 
      <div class="ui-jqgrid ui-widget ui-widget-content"> 
       <div class="ui-jqgrid-titlebar ui-widget-header ui-helper-clearfix"> 
        <span class="ui-jqgrid-title">TITLE</span> 
       </div> 
       <table class="sidList"></table> 
       <div class="sidPager"></div> 
       <div class="privSlideout" style="display:none;"> 
        <table cellspacing="0" cellpadding="0" border="0"> 
         <thead> 
          <tr> 
           <th class="ui-th-column ui-state-default" colspan="3" class="privLabel"></th> 
          </tr> 
          <tr> 
           <th class="ui-th-column ui-state-default" style="width: 50px;">Allow</th> 
           <th class="ui-th-column ui-state-default" style="width: 50px;">Deny</th> 
           <th class="ui-th-column ui-state-default" style="width: 520px;">Privilege</th> 
          </tr> 
         </thead> 
         <tbody class="privTable"> 
         </tbody> 
        </table> 
        <button class="btnOk">Ok</button> 
        <button class="btnCancel">Cancel</button> 
       </div> 
       <div style="display:none;" class="newPrivPicker"> 
        <div style="font-size: 10pt"> 
         <table class="newPrivTable"></table> 
         <div class="newPrivPager"></div> 
        </div> 
       </div> 
      </div> 
      */ 
      this.html('<div class="ui-jqgrid ui-widget ui-widget-content"><div class="ui-jqgrid-titlebar ui-widget-header ui-helper-clearfix"><span class="ui-jqgrid-title">' + this.data('options').title + '</span></div><table class="sidList"></table><div class="sidPager"></div><div class="privSlideout" style="display:none;"><table cellspacing="0" cellpadding="0" border="0"><thead><tr><th class="ui-th-column ui-state-default" colspan="3" class="privLabel"></th></tr><tr><th class="ui-th-column ui-state-default" style="width: 50px;">Allow</th><th class="ui-th-column ui-state-default" style="width: 50px;">Deny</th><th class="ui-th-column ui-state-default" style="width: 520px;">Privilege</th></tr></thead><tbody class="privTable"></tbody></table><button class="btnOk">Ok</button><button class="btnCancel">Cancel</button></div><div style="display:none;" class="newPrivPicker"><div style="font-size: 10pt"><table class="newPrivTable"></table><div class="newPrivPager"></div></div></div></div>'); 
      pager = $('.sidPager', this); 
      enumerateUrl = this.data('options').aclControllerUrl + '/enumerate/aclid/' + this.data('options').aclId; 
      sid = $('.sidList', this).jqGrid({ 
       url: enumerateUrl, 
       datatype: 'json', 
       mtype: 'GET', 
       colNames: ['Type', 'Name'], 
       colModel: [ 
        {name: 'type', index:'type', width: 20, align: 'center', sortable: false}, 
        {name: 'displayName', index:'displayName', align: 'center', sortable: false} 
       ], 
       rowNum: 10, 
       rowList: [10, 100, 1000], 
       autowidth: true, 
       height: 'auto', 
       forceFit: true, 
       gridview: true, 
       pager: pager 
      }); 
      sid.navGrid(pager, { 
       edit:false, 
       add:false, 
       del:false, 
       search:false, 
       refresh:true, 
       refreshtitle: 'Refresh Users and Groups' 
      }); 
      return this; 
     } 
    }; 

    defaults = { 
     aclId: 0, 
     title: 'Permissions Editor', 
     aclControllerUrl: '' 
    }; 

    $.fn.acleditor = function (method) { 
     if (methods[method]) { 
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
     } else if (typeof method === 'object' || !method) { 
      return methods.init.apply(this, arguments); 
     } else { 
      $.error('Method ' + method + ' does not exist on jQuery.AclEditor.'); 
     } 
     return null; 
    }; 

}(jQuery)); 

Tại sao tôi nhận được "Lỗi cú pháp không bắt buộc, biểu thức không được công nhận: #" trên dòng 75 của Jquery.js?

Ồ, và tôi đang sử dụng jqgrid 3.8.1 và jquery 1.4.2.

EDIT: Các JSON trở là:

{"rows":[{"id":"7109766F-DC8A-4134-8C1F-02F87A72DE9C","cell":["Group","Developers"]},{"id":"22EEB0C5-6792-4C24-8047-B187D38F63EC","cell":["Group","Users"]}],"page":1,"total":1,"records":2} 

Trả lời

48

Được rồi, xin lỗi tất cả mọi người. Đã tìm thấy sự cố - hóa ra jqGrid lưu ID của thẻ bảng và sau đó tham chiếu bảng sau đó bằng thẻ đó. Tặng <table> một ID đã khắc phục được sự cố.

+0

Đã xảy ra lỗi tương tự, đang tìm kiếm lỗi trong hơn một giờ. Câu trả lời này đã cứu tôi, cảm ơn! Ngoài ra, đây không phải là vấn đề với các phiên bản cũ của jqGrid. Nó ngừng hoạt động khi tôi nâng cấp từ 3.5.3 lên 3.8.2. –

+1

Chỉ để giúp làm rõ - anh ấy đang nói về việc này

thay vì
010110110101

+1

@ 010110110101: Tôi đã nói ID chứ không phải lớp. :) –

-1

Nếu có ai từng tìm kiếm lỗi này bằng "jqGrid for ASP.NET MVC". Tôi nhận được lỗi chính xác này khi lưu hộp thoại "thêm mới".

Khi nó quay ra, tôi đã không đặt "MyGridModel.AddDialogSettings.CloseAfterAdding = true;"