Запретить в teaxtarea вводить больше 40 слов.

Статус
В этой теме нельзя размещать новые ответы.

Yulo

Постоялец
Регистрация
21 Апр 2008
Сообщения
152
Реакции
175
Есть скрипт который считает количество слов в textarea, как запретить вводить туда больше 40 слов (не знаков), без всяких алертов. Чтоб просто дальше не печаталось.
Вот сам скрипт
Код:
function countSimbol(t){
jQuery(document).ready(function($){
var Text=$(t).val();
var L=Text.length;
if(L>0){
    var noSpace=Text.match(/\S/g).length;
    var textArr = Text.split(' ');
      var i = textArr.length,
          W = 0;
      while(i--)
      {
    if(textArr[i].length > 2) {
      ++W;
            }
        }
    }
else {var noSpace=0; var W=0;}
$('#fin-textarea11 span:first').html(L);
$('#fin-textarea11 span:eq(1)').html(noSpace);
$('#frt').html(W);
$('.incountwords').val(W);
});}
 

mdss

♖♘♗♕♔♗♘♖
Регистрация
20 Фев 2007
Сообщения
1.152
Реакции
709
Код:
$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = this.value.match(/\S+/g).length;

    if (words > 200) {
      // Split the string on first 200 words and rejoin on spaces
      var trimmed = $(this).val().split(/\s+/, 200).join(" ");
      // Add a space at the end to make sure more typing creates new words
      $(this).val(trimmed + " ");
    }
    else {
      $('#display_count').text(words);
      $('#word_left').text(200-words);
    }
  });
});
HTML:
<textarea name="txtScript" id="word_count" cols="30" rows="10"></textarea>
<br>
Total word count: <span id="display_count">0</span> words. Words left: <span id="word_left">200</span>
 
  • Нравится
Реакции: Yulo

Yulo

Постоялец
Регистрация
21 Апр 2008
Сообщения
152
Реакции
175
Код:
$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = this.value.match(/\S+/g).length;

    if (words > 200) {
      // Split the string on first 200 words and rejoin on spaces
      var trimmed = $(this).val().split(/\s+/, 200).join(" ");
      // Add a space at the end to make sure more typing creates new words
      $(this).val(trimmed + " ");
    }
    else {
      $('#display_count').text(words);
      $('#word_left').text(200-words);
    }
  });
});
HTML:
<textarea name="txtScript" id="word_count" cols="30" rows="10"></textarea>
<br>
Total word count: <span id="display_count">0</span> words. Words left: <span id="word_left">200</span>
Спасибо прекрасно работает. Но в моем скрипте было условие считать за слово длиною больше 2 букв, если меньше двух букв (в, на, с и т.д) то эти символы не считаем за слова и соотвественно счетчик не идет.
 

stepanyk

Писатель
Регистрация
15 Янв 2016
Сообщения
5
Реакции
2
Просто в match поменяй "+" на "{3,}", то есть "три или больше"
Код:
$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = this.value.match(/\S{3,}/g).length;

    if (words > 200) {
      // Split the string on first 200 words and rejoin on spaces
      var trimmed = $(this).val().split(/\s+/, 200).join(" ");
      // Add a space at the end to make sure more typing creates new words
      $(this).val(trimmed + " ");
    }
    else {
      $('#display_count').text(words);
      $('#word_left').text(200-words);
    }
  });
});
 
  • Нравится
Реакции: Yulo

Absolute

Крокодил ;)
Регистрация
9 Авг 2009
Сообщения
581
Реакции
455
maxlength="40" и не париться...
Так это вроде кол-во символов. А ему надо кол-во слов)
Если ТС устраивает работа кода Для просмотра ссылки Войди или Зарегистрируйся, значит ТС'у в своем коде после цикла по логике достаточно добавить условие:
HTML:
if(W >= 40){
    $(t).val(textArr.slice(0, 40).join(' '));
  }
 
Последнее редактирование:
  • Нравится
Реакции: Yulo

Yulo

Постоялец
Регистрация
21 Апр 2008
Сообщения
152
Реакции
175
Просто в match поменяй "+" на "{3,}", то есть "три или больше"
Код:
$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = this.value.match(/\S{3,}/g).length;

    if (words > 200) {
      // Split the string on first 200 words and rejoin on spaces
      var trimmed = $(this).val().split(/\s+/, 200).join(" ");
      // Add a space at the end to make sure more typing creates new words
      $(this).val(trimmed + " ");
    }
    else {
      $('#display_count').text(words);
      $('#word_left').text(200-words);
    }
  });
});
Привет при замене на {3,} сыпится ошибка, но при этом скрипт работает.
Код:
Uncaught TypeError: Cannot read property 'length' of null
 

stepanyk

Писатель
Регистрация
15 Янв 2016
Сообщения
5
Реакции
2
Привет при замене на {3,} сыпится ошибка, но при этом скрипт работает.
Код:
Uncaught TypeError: Cannot read property 'length' of null
Это происходит из-за того, что функция str.match(regexp) если нет совпадений возвращает не массив, а null. Надо значение проверять, например:
Код:
$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = this.value.match(/\S{3,}/g);
    words = (words)?words.length:0;

    if (words > 200) {
      // Split the string on first 200 words and rejoin on spaces
      var trimmed = $(this).val().split(/\s+/, 200).join(" ");
      // Add a space at the end to make sure more typing creates new words
      $(this).val(trimmed + " ");
    }
    else {
      $('#display_count').text(words);
      $('#word_left').text(200-words);
    }
  });
});
 
  • Нравится
Реакции: Yulo

J.Vance

Создатель
Регистрация
25 Июл 2016
Сообщения
10
Реакции
1
В html5 если более элегантный способ. Правда может потребоваться фоллбэк для Сафари.
Достаточно прописать атрибут maxlength="40" (если нужно ограничить количество знаков) либо pattern="..." для проверки REgExp'ами. Подробнее тут Для просмотра ссылки Войди или Зарегистрируйся
 
  • Нравится
Реакции: Yulo
Статус
В этой теме нельзя размещать новые ответы.
Сверху