2010-10-25 14 views
19

Ciao a tutti :) Mi dispiace per il listato di codice lungo, ma non so esattamente dove sto strizzando qui. Sto scrivendo un plugin jQuery per uso interno per la modifica degli elenchi di controllo degli accessi.jqGrid getta "errore non rilevato di sintassi, l'espressione non riconosciuta: #"

Un componente dell'editor ACL è il plugin jqGrid, che è un'implementazione griglia eccellente, che viene fornito con le proprie AJAX impianti di carico e così via. Ho usato questo componente in precedenza, ma non ho mai provato a usarlo come sottocomponente di un plugin prima. La richiesta AJAX è stata inviata correttamente (da quello che vedo nel debugger di Chrome), il che mi porta a credere che il bug non risieda nel mio codice, ma non sono sicuro di cosa fare a questo punto.

Mi dispiace per la grande quantità di codice, ma questo è l'esempio minimo mi veniva in mente.

/*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)); 

Perché ricevo un "Uncaught Errore di sintassi, l'espressione non riconosciuta: #" on line 75 di jquery.js?

Oh, e sto usando jqGrid 3.8.1 e jQuery 1.4.2.

EDIT: Il JSON restituito è:

{"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} 

risposta

48

Va bene, mi dispiace a tutti. Trovato il problema: jqGrid salva l'ID del tag table e quindi fa riferimento alla tabella in seguito utilizzando quel tag. Dando allo <table> un ID risolto il problema.

+0

Aveva lo stesso errore, cercava un bug per oltre un'ora. Questa risposta mi ha salvato, grazie! Inoltre, questo non era un problema con le versioni precedenti di jqGrid. Ha smesso di funzionare quando ho aggiornato da 3.5.3 a 3.8.2. –

+1

Giusto per aiutare a chiarire - sta parlando di fare questo invece di

010110110101

+1

@ 010110110101: ho detto ID, non classe. :) –

-1

Se qualcuno viene mai alla ricerca di questo errore con "jqGrid per ASP.NET MVC". Ho ottenuto questo errore esatto sul salvataggio di una finestra di dialogo "aggiungi nuovo".

Come si è visto, non avevo impostare "MyGridModel.AddDialogSettings.CloseAfterAdding = true;"

Problemi correlati