2014-01-24 2 views
0

Я пытался найти часы, чтобы понять это. Почему в asp-управлении с несколькими строками textbox у меня есть лимит в 140 символов, но иногда я могу ввести 141 или 142 символа, особенно с помощью клавиши ввода?Проверить размер многострочного текстового поля

Вот мой код

function CheckSize(o, size) { 
    if (o != null) { 
     var s = o.value.length; 
     if (s > size) { 
      debugger; 
      alert('Lamentamos mas foi atingido o limite máximo para o texto a introduzir.\nSugerimos que introduza um texto com menos de ' + size + ' caracteres.\nAgradecemos a sua compreensão.'); 
      // alert(resources.error_reachedMaxNumberOfChars.replace("{0}",String(size))); 
      var trim = o.value.trim(); 
      o.value = trim.substring(0, size - 1); 
     } 
    } 
} 
+2

Как вы относитесь к этой функции разметке? Можете ли вы предоставить [jsFiddle] (http://jsfiddle.net/) проблемы, с которой вы столкнулись? – Xotic750

+0

Сторона примечания: 'substring()' не принимает символ, который находится в позиции, обозначенной вторым параметром, поэтому вам не нужно '- 1'. , , это должно быть то, что вы ищете: 'o.value = trim.substring (0, size);' – talemyn

+1

Также, какой браузер вы используете? IE8 и ниже не поддерживают метод 'trim()' для строк. Это нарушит логику, поскольку она пытается урезать значение в текстовом поле. – talemyn

ответ

0

Моя догадка, что вы работаете в довольно общей maxLength ошибка, которая присутствовала в ряде современные браузеры (do a Google search about it). Это пример того, как вы могли бы решить проблему, хотя и не затвердевали для каждой ситуации (например, вставки).

CSS

.hidden { 
    visibility: hidden; 
} 

HTML

<textarea id="myTextbox" maxlength="140" rows="4" cols="35"></textarea> 
<div id="count">0</div> 
<div id="alert" class="hidden">At max chars!</div> 
<div id="newline" class="hidden">Newline prevented as it is 2 characters!</div> 

Javascript

var myTextBox = document.getElementById('myTextbox'), 
    count = document.getElementById('count'), 
    alert = document.getElementById('alert'), 
    newline = document.getElementById('newline'), 
    maxLength = 140; 

myTextBox.addEventListener('input', function (e) { 
    var value = e.target.value.replace(/\r?\n/g, '\r\n'), 
     length = value.length; 


    if (length >= maxLength) { 
     if (length > maxLength) { 
      length = maxLength - 1; 
      e.target.value = value.slice(0, length); 
      newline.classList.remove('hidden'); 
     } else { 
      alert.classList.remove('hidden'); 
      newline.classList.add('hidden'); 
     } 
    } else { 
     alert.classList.add('hidden'); 
     newline.classList.add('hidden'); 
    } 

    count.textContent = length; 
}, false); 

На jsFiddle

+0

Хорошо, что работает в последних браузерах Но для бизнес-требований требуется IE ( –

+0

Для старых IE, которые не поддерживают 'addEventListender', но используют' attachEvent' , тогда вам нужно назначить прослушиватель событий по-разному. То же самое с 'classList', вам нужно будет добавлять и удалять классы с помощью polyfil/shim. В противном случае все остальное совместимо. Поиск здесь в SO и вы найдете нужную вам информацию . Вместо «input» вы можете использовать «keypress» или что-то подобное, соответствующее вашим требованиям. – Xotic750

0

Пожалуйста, попробуйте следующий код:

function CheckSize(textBox, maxLength) 
{ 
    if (textBox.value.length > maxLength) 
    { 
     alert("Max characters allowed are " + maxLength); 
     textBox.value = textBox.value.substr(0, maxLength); 
    } 
} 
+0

Проблемы сохраняются –

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