JQuery защиты от записи в textarea для подстановочных знаков - PullRequest
3 голосов
/ 15 апреля 2010

Кто-нибудь знает, как защитить строку-шаблон от изменения в текстовой области?

HTML:

<textarea name="mail_text" id="mail_text">
{salutation} {recipient},
thanks for your email.
Regards
{username}
</textarea>

Я хотел бы поймать, когда кто-то пытается изменить один из подстановочных знаков: {приветствие} , {получатель} и {имя пользователя}

$("textarea").keyup(function() {
  var val = $(this).val();
  //protect the wildcards
});

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 апреля 2010

Вы не можете практически "защитить" часть текстовой области. Наивно можно попытаться заблокировать нажатия клавиш ввода, когда курсор находится внутри шаблона {...}, но существует множество других способов его редактирования, например. выберите диапазон, затем удалите / замените, вырежьте / скопируйте / вставьте, перетащите и отпустите ...

Может быть, лучше просто отслеживать значение текстовой области и показывать предупреждение под ним, когда есть что-то в значении, которое неверно, например ::

<textarea id="mail_text">...</textarea>
<div id="mail_text_warning"></div>

<script type="text/javascript">
    function checkMailText() {
        var tokens= ['username', 'recipient', 'salutation'];
        var value= $('#mail_text').val();
        var problems= [];

        $.each(tokens, function() {
            if (value.split('{'+this+'}').length!==2)
                problems.push('Please ensure there is one and only one {'+this+'} token present in the text');
        });
        matches= value.match(/\{[^\}]*\}/g);
        if (matches!==null) {
            $.each(matches, function() {
                for (var i= tokens.length; i-->0;)
                    if ('{'+tokens[i]+'}'===this)
                        return;
                problems.push('Token '+this+' is not known');
            });
        }

        $('#mail_text_warning').text(problems.join('. '));
    }
    setInterval(checkMailText, 500);
</script>
0 голосов
/ 15 апреля 2010

Сделай все проще.
Создайте два textareas : один с информацией, которую пользователь может написать («спасибо за вашу электронную почту. С уважением.» И т. Д.). И еще один с подстановочными знаками или конечными результатами, если это возможно. Вы можете изменить второе текстовое поле сразу после типа пользователя (используйте событие keydown или keyup ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...