2015-11-03 3 views
1

Мне нужно предотвратить дополнительные разрывы строк в моем текстовом поле. Я использую ниже в моей функции keyup, чтобы предотвратить это.Предотвращение разрыва строки ключа

$('textarea#tt').val($('textarea#tt').val().replace(/^(\r\n)|(\n\n)/,'')); 

Но если пользователь имеет ключ ввода, он не работает должным образом. Как я могу это исправить? Пример

предотвратить

The brown 
      //additional line space 
kettle 
      //additional line space 
      //additional line space 

Ожидаемое

The brown 
kettle 
+0

Ваше 'регулярное выражение 'заменяет только первые вхождения и заменяет' \ r \ n' только тогда, когда оно встречается в начале ввода, а не где-либо еще, тогда как для double '\ n \ n' вы не проверяете для типа '\ r \ n \ r \ n'. Это все предназначено? Что делать, если пользователь копирует/вставляет текст во входные данные со многими такими перерывами? – trincot

+0

Я обновил свой ответ, предположив, что вы хотите, чтобы все двойные разрывы заменялись на однострочные разрывы и что любой начальный разрыв строки должен быть удален. – trincot

ответ

1

Вы должны обработать keypress событие таким же образом, и вы можете даже добавить keydown событие, а также:

$('textarea#tt').bind('keypress keyup keydown', function (e) { 
    $(this).val($(this).val(). 
     replace(/^(\n|\r\n)+/, ''). 
     replace(/(\n|\r\n){2,}/g, '\n')); 
}); 

Обратите внимание, что я также модифицировал regex:

  • он относится к разрыву линии одинаково независимо от того, являются ли они \n или \r\n;
  • заменяет двойные (тройные, ...) линейные разрывы с одним;
  • с использованием модификатора g он заменяет все вхождения. Это необходимо для случаев, когда пользователь вставляет длинный текст в textarea с потенциально большим количеством двойных разрывов строк;
  • удаляется любое количество начальных разрывов.
Смежные вопросы