2014-10-17 2 views
3

Я искал ответ на очень простой вопрос, как остановить пользователя от ввода 250 символов в ячейку Handsontable? Я обнаружил, что могу воссоздать проверку, но это не остановит пользователя ввода более 250 символов. Я ищу что-то вроде MAXLENGTH:Сопряженные символы лимитированных символов

<input id="notes" maxlength="250" /> 



var date_validator_regexp = /(^$|^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/][0-9]{4}$)/; 
var limit_validator_regexp = /(^[\s\S]{0,250}$)/; 

     $("#gridUpdateNotes").handsontable({ 
      startRows: 1, 
      startCols: 2, 
      colHeaders: ["Date", "Notes"], 
      columnSorting: false, 
      enterBeginsEditing: false, 
      autoWrapRow: true, 
      autoWrapCol: true, 
      minSpareRows: 1, 
      colWidths: [140, 450], 
      removeRowPlugin: true, 
      copyPaste: true, 
      afterValidate: function (isValid, value, row, prop, source) { 
       if (isValid == false && prop === "Notes") { 
        alert("The Notes cannot have more than 250 characters."); 
       } 
      }, 
      columns: [ 
       { 
        data: "NoteDate", 
        type: "date", 
        dateFormat: "mm/dd/yy", 
        allowInvalid: false, 
        validator: date_validator_regexp 
       }, 
       { 
        data: "Notes", 
        allowInvalid: false, 
        validator: limit_validator_regexp 
    } 
      ] 
     }); 

ответ

4

Этот вопрос несколько месяцев, так Filjan больше не нужен ответ. Но, надеюсь, это поможет кому-то.

Вместо использования регулярного выражения в качестве валидатора вы можете использовать функцию.

Определение столбца, как это работает для меня ...

cmlCols = [ 
    { 
     data: "Notes", 
     validator: function (value, callback) { 
      if (value.length > 255) { 
       alert('Must be 255 character or less. Extra characters will be removed'); 
       this.instance.setDataAtCell(this.row, this.col, value.substring(0, 255), null); 
      } 
      callback(true); 
     }]; 
1

Я думаю, что создание нового редактора клеток кажется, что лучший способ приблизиться к этому:

(function (Handsontable) { 

'use strict'; 

var MaxLengthEditor = Handsontable.editors.TextEditor.prototype.extend(); 

MaxLengthEditor.prototype.prepare = function() { 
    Handsontable.editors.TextEditor.prototype.prepare.apply(this, arguments); 

    this.TEXTAREA.maxLength = this.cellProperties.maxLength; 
}; 

Handsontable.editors.MaxLengthEditor = MaxLengthEditor; 
Handsontable.editors.registerEditor('maxlength', MaxLengthEditor); 

})(Handsontable); 
+1

Самое замечательное в этом по сравнению с другим ответом: пользователю даже не разрешено вводить символы maxLength. Я не мог использовать его совсем как есть. Никогда не выяснялось, как установить пользовательскую cellProperties.maxLength, но удалось найти обходное решение с комбинацией этого настраиваемого редактора и слегка измененного настраиваемого средства визуализации. –

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