2016-08-10 4 views
0

У меня в настоящее время проблема с кодом. В моем коде у меня есть текстовое поле, где пользователь может ввести заголовок статьи, и я хотел бы, чтобы эта статья была только в одной строке. Вот почему я написал сценарий, чтобы пользователи не могли нажать клавишу возврата. Но они могут обойти эту безопасность, действительно, если они скопируют/пройдут разрыв строки, они могут ввести разрыв строки. Итак, есть ли способ обнаружить разрыв строки? Я полагаю, что мы можем сделать это с помощью регулярных выражений и с \ n или \ n. Однако я пробовал это:Предотвратите разрыв строки в строке

var enteredText = $('textarea[name="titleIdea"]').val(); 
var match = /\r|\n/.exec(enteredText); 
if (match) { 

    alert('working'); 
} 

и он не работает по неизвестной причине. Я думаю, что var введенText = $ ('textarea [name = "titleIdea"]'). Val(); не работает, потому что, когда я пытаюсь предупредить(), он ничего не показывает. Но что-то странное в том, что когда я делаю предупреждение о $ ('textarea [name = "titleIdea"]'). Val(); а не на переменную введенного текста, она показывает содержимое. Отличный день. (Извините за ошибки, я французский)

+0

Есть ли причина, по которой вы не используете текстовое поле? Попробуйте добавить в свой код некоторые инструкции console.log(), чтобы увидеть, где он ломается: console.log (введенный текст); var match = /\r|\n/.exec(enteredText); – Wes

+0

@Wes 'console.log' - это не инструкция, а функция. – Hydro

+2

Вы действительно должны выбирать типы ввода в соответствии с ожидаемыми вами данными. Первое правило дизайна пользовательского интерфейса - сделать его очевидным, какой тип данных вы ожидаете. По соглашению с @Wes вы должны использовать поле ввода текста типа. Текстовая область заставляет пользователя думать, что многострочная линия в порядке. Для селектора я считаю, что внутренние кавычки должны быть одинарными кавычками, хотя вы всегда можете просто добавить id к элементу и выбрать его по id. –

ответ

1

если они копируют/мимо разрыва строки они могут ввести разрыв строки

Вот почему вы не должны даже беспокоиться о предотвращении их попадания его - просто не спасите его. Удалите его на событиях blur и input, если вы действительно этого хотите, но единственный раз, когда это действительно имеет значение, перед тем, как вы сохраните его в базе данных (или независимо от того, что вы используете).

$('textarea[name="titleIdea"]').on('blur input', function() { 
    $(this).val($(this).val().replace(/(\r\n|\n|\r)/gm,"")); 
}); 

И, как и другие люди уже упоминалось выше, если они не могут делать разрывы строк, вы не должны использовать текстовую.

+0

Хорошо спасибо за ваши ответы, это действительно помогает мне. Я сделаю, как вы сказали. – Nebalicien

0

Я предполагаю, что ваша проблема связана с событием вставки.

Если я догадался, что это мой сниппет:

$(function() { 
 
    $('textarea[name="titleIdea"]').on('paste', function(e) { 
 
    var data; 
 
    
 
    if (window.clipboardData) { // for IE 
 
     data = window.clipboardData.getData('Text'); 
 
    } else { 
 
     data = e.originalEvent.clipboardData.getData('Text'); 
 
    } 
 
    
 
    var match = /\r|\n/.exec(data); 
 
    if (match) { 
 

 
     alert('working'); 
 
     console.log(data); 
 
    } 
 
    }) 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<textarea name="titleIdea"> 
 

 
</textarea>

0

Это должно быть обработано в бэкэнда. Даже если вы используете рекомендуемый подходящий тип ввода текста HTML (вместо textarea), вы все равно не удаляете возможность сохранения возвратных символов.

В двух других ответах используется Javascript, который технически является областью этого вопроса. Однако это невозможно решить с помощью Javascript! Это предполагает, что вход всегда будет получен из формы, которую вы создали, при условии, что функция JS работает отлично.

Единственный способ избежать ввода определенных символов в вашу базу данных - это проанализировать и очистить данные на исходном языке перед вставкой в ​​вашу базу данных.

Например, если вы используете PHP, вы можете запустить аналогичное регулярное выражение, которое удалило символы \ n \ r до того, как оно перешло в обработку.

Javascript только помогает UX в этом случае (пользователь видит, что они будут экономить). Но единственный способ обеспечить целостность данных - проверить его на стороне сервера.

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