Как запретить пользователю удалять слова со специальными символами из текстового поля
Я работаю в электронной почте CMS, используя ckeditor.net. Во время выполнения пользователь может изменить тело письма, я хочу ограничить удаление пользователем всех специальных слов, начинающихся с @@.
Вот пример-
Email Alert! :<br />
<br />
**@@Comments**<br />
<br />
Please do not reply to this email.
Я не хочу, чтобы пользователь удалял слово "@@ comments" и все символы "@@" в других шаблонах электронной почты. Можете ли вы дать какой-либо код в JavaScript?
Во время выполнения я заменяю слова "@@" на несколько абзацев.
1 ответ
Решение
Я не тестировал этот код (просто включил его в этот ответ), но вот что я сделаю.
При использовании метода keydown для ввода текста вам необходимо прослушать клавишу Backspace:
var input = document.getElementById('myInput');
input.onkeydown = function() {
var key = event.keyCode || event.charCode;
// Detect Backspace (8) & Delete (46) keys
if( key == 8 || key == 46 ){
var caretPos = getCaretPos(input);
// Read backward from the caret position
// until you hit a space or index 0:
while ( (input.value[caretPos] != " ") && (caretPos > 0) ){
caretPos--;
}
// Once you hit the space or index 0, read forward two characters
// to see if it === "@@". If both chars are "@", cancel
// the keydown event. You should probably do some bounds checking
// here. Could also be done with String.subtring
if ( input.value[(caretPos + 1)] == "@" &&
input.value[(caretPos + 2)] == "@" )
{
return false;
}
}
};
function getCaretPos(input) {
// Internet Explorer Caret Position (TextArea)
if (document.selection && document.selection.createRange) {
var range = document.selection.createRange();
var bookmark = range.getBookmark();
var caret_pos = bookmark.charCodeAt(2) - 2;
} else {
// Firefox Caret Position (TextArea)
if (input.setSelectionRange)
var caret_pos = input.selectionStart;
}
return caret_pos;
}
Рекомендации