3

有谁知道保护字符串通配符在文本区域中不发生变化的可能性?

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
});

谢谢!

4

2 回答 2

2

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

最好简单地监视 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>
于 2010-04-15T10:33:33.633 回答
0

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

于 2010-04-15T10:25:03.787 回答