Ошибка jqGrid при сортировке столбца datetime

#jquery #datetime #sorting #jqgrid

#jquery #datetime #сортировка #jqgrid

Вопрос:

Когда я устанавливаю [ sorttype: "datetime", datefmt: "d/m/Y H:i:s" ] сетку jQuery, я получаю сообщение об ошибке при сортировке столбца datetime.

Сообщение таково: undefined . Но это происходит только в IE 8/9, в Firefox это работает нормально.

У меня есть несколько таблиц, созданных динамически. Одна созданная таблица выглядит следующим образом:

 <table id="files_1">
  <thead> 
    <tr>
      <th>Sequencial</th>
      <th>File</th> 
      <th>Datetime</th>
      <th>Size</th>
    </tr>
  </thead>
  <tbody>
  <tr>
    <td>1</td>
    <td>File 1</td>
    <td>07/04/2011 09:28:00</td>
    <td>100</td>
  </tr>
  <tr>
    <td>2</td>
    <td>File 2</td>
    <td>07/03/2011 09:28:00</td>
    <td>101</td>
  </tr>
  </tbody>
</table>
  

После этого появляется функция javascript, подобная этой:

 $(document).ready(function() {
    tableToGrid("#files_1", {
        height: 'auto',
        width: '100%',  
        rowNum: '2',
        rowTotal: '2', 
        hoverrows: true,
        colNames: ['', 'File', 'Datetime', 'Size (bytes)'],
        colModel: [
            {name:'Sequencial', index:'Sequencial', width: '30', stype:'text',  align: 'center', sorttype:'number'},
            {name:'File', index:'File', width: '370', stype:'text',  align: 'left'}, 
            {name:'Datetime', index:'Datetime', width: '', stype:'text',  align: 'center', datefmt: "d/m/Y H:i:s", sorttype: 'date'},
            {name:'Size', index:'Size', width: '', stype:'text', align: 'center', sorttype:'number'},
        ]
    });
});
  

Сетка создана и работает нормально.

Выполняется сортировка всех столбцов, кроме столбца datetime.

Когда я пытаюсь отсортировать этот столбец (в IE 8 или IE 9), он возвращает красивое короткое сообщение (не определено) из сетки, а не ошибку javascript. Это похоже на то, как если бы сетка не смогла получить некоторый элемент / атрибут во время сортировки.

Комментарии:

1. какие данные вы используете для сетки? Как вы заполняете сетку? Используете ли вы formatter:'date' ? Полный пример кода, который можно использовать для воспроизведения проблемы, является лучшим.

2. вы должны изменить свой исходный вопрос и добавить любую необходимую информацию вместо того, чтобы писать ответы на его собственный вопрос. Это значительно упрощает чтение вашего вопроса. Кроме того, вам следует написать комментарий, начинающийся с @Oleg, если вы хотите, чтобы кто-нибудь его прочитал (подробности смотрите здесь )

Ответ №1:

Попробуйте использовать полную информацию о формате даты:

  {
  name:'Datetime', 
  index:'Datetime', 
  width: '', 
  formatter:'date', 
  formatoptions: {newformat:'m/d/Y'}, 
  datefmt: 'd-M-Y', 
  sorttype: 'date'
 }
  

Ответ №2:

Есть еще одна простая ошибка: запятая перед ] в конце colModel определения. Комбинация },] является синтаксической ошибкой.

Демонстрация включает в себя код, который вы опубликовали, и я не вижу ошибок, по крайней мере, в IE9.

Вы можете дополнительно проверить, что в вашей версии jquery.jqGrid.min.js в комплект поставки которого вы загрузили следующие модули: grid.base.js , grid.common.js , grid.tbltogrid.js. Для этого вы можете просто открыть jquery.jqGrid.min.js откройте текстовый редактор и выполните поиск в комментарии в начале файла после слов «Модули:» для grid.base.js , grid.common.js , grid.tbltogrid.js.

Комментарии:

1. Другая деталь заключается в том, что я вызывал это с помощью ajax. При успешном завершении был добавлен ответ в div с помощью $(«#divId»).html(response). Я обнаружил, что IE не очень хорошо работает с этим способом добавления содержимого. Затем я изменил команду на $(«#divId»).append(ответ), и она прошла, работает нормально в Firefox, таким образом, как и в IE. Важно: включенные файлы (js и css jqgrid) находились в файле, вызванном ajax. Я изменил ее на заголовок файла, который вызывает ajax. Теперь все работает…