jquery在textarea中为通配符写保护

时间:2010-04-15 09:53:45

标签: jquery textarea protection data-protection

是否有人知道保护字符串通配符在textarea中更改的可能性?

HTML:

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

当有人试图更改其中一个通配符时,我想抓住: {salutation} {recipient} {username}

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

谢谢!

2 个答案:

答案 0 :(得分:2)

你实际上不能“保护”textarea的一部分。天真地,当光标位于{...}模式内时,您可以尝试阻止输入按键,但是还有很多其他方式可以编辑,例如。选择范围然后删除/替换,剪切/复制/粘贴,拖放...

最好只监控textarea的值,并在有错误的值时显示警告,例如:

<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>

答案 1 :(得分:0)

让一切变得更轻松 创建两个 textareas :一个包含用户可以写的信息(“感谢您的电子邮件。问候。”等)。如果可能的话,另一个带有通配符或最终结果。您可以在用户输入后立即修改第二个 textareas (使用 keydown keyup 事件)。