2013-12-20 2 views
0

У меня есть простой tablesorter, в котором я написал свой собственный синтаксический анализатор для столбца. На стороне PhP я генерирую атрибут данных, значение которого используется как значение сортировки для ячейки. Моя проблема заключается в том, что в пользовательском парсере, когда я возвращаю значение Data -..., он дает мне ошибку для целочисленного значения, когда тип, заданный для настраиваемого парсера, является текстом. Обычно можно ожидать таких ошибок. Ошибка на консоли, порожденного tablesorter.js являетсяJquery tablesorter генерирует ошибку в пользовательском синтаксическом анализаторе для текста типа, когда ввод является числовым

 Uncaught TypeError: Object 11 has no method 'replace' 

Где 11 это числовое значение, присвоенное атрибуту данных skaddress клетки.

$.tablesorter.addParser({ 
    id: 'skaddress', 
    is: function(s) { 
     return false; 
    }, 
    format: function(s, table, cell, cellIndex) { 
     return $(cell).data('skaddress'); 
    }, 
    type: 'text' // <<<<-------- If this is changed to 'numeric', all is well 
}); 

Другими словами, если у меня есть числовое значение, присвоенное данных skaddress атрибут объявления клетки он терпит неудачу, когда я думаю, что тип «текст» просто означает, что любая строка, в том числе все цифры, будет считаться текстовое поле. HTML-разметка ячейки, генерирующая ошибку, равна:

 <td data-ssipaddress="11">12.29.14.97.190.111</td> 

В любом случае, это так? Провел много времени, пытаясь найти реальное решение. Конечно, есть обходные пути. Я могу, например, всегда генерировать фиксированный алфавит перед длинной числовой строкой на стороне PhP. Причина, по которой мне требуется текстовое поле, а не числовое поле, состоит в том, что мои строки состоят из длинной серии цифр, хотя в примере я использую только две цифры.

Пожалуйста, не просите меня вместо этого использовать Datatables. Мне нравится tablesorter (тот, который поддерживается Mottie?), Поскольку он имеет небольшой вес и отлично подходит для того, что мне нужно, и я говорю лучше, чем Datatables в каком-то аспекте. Мне потребовалось некоторое время, чтобы понять это. Только эта неожиданная проблема ...

Обновление: Это работает, если перед началом строки, присвоенной атрибуту data!

Благодаря

ответ

1

Существует разница между 555 и "555".

Вы должны убедиться, что ваше значение является строкой при ее передаче. Вы можете заверить, что:

foo = foo + ""; 

Если foo - это ваше значение.

+1

Да. Спасибо за помощь. Ваше предложение работает, но вы можете рассказать мне об этом: Когда я возвращаю $ (cell) .data ('skaddress'), я не возвращаю строковое значение данных-данных-данных? Итак, зачем мне нужен еще один шаг, чтобы снова преобразовать его в строку? – Sam

+1

Это хороший вопрос. Фактически вы возвращаете значение атрибута «skaddress», а целое или строковое значение определяется несколькими факторами: вашим браузером, версией/реализацией jQuery, фактическим значением атрибута. Учитывая тот факт, что в вашем случае это целое число, мы можем смело заключить, что оно может быть целым, если мы верим собственным глазам. –

+0

Я подумал позже, что также может быть, что потребитель (функция или метод в tablesorter здесь) может иметь свой собственный код, который считывает значение, решает тип и выполняет какое-то внутреннее присвоение, которое приводит к ошибке. Как ни странно, тоже работает ноль! Я предполагаю, что это должна быть логика кода tablesorter. Большое спасибо ... Я потратил много времени на попытку исправить это, пока не получил ваш обходной путь. – Sam

Смежные вопросы