检测何时将文本输入到文本区域并相应地更改它

2024-03-17

我有一个textarea用户可以在其中输入或粘贴其他人的电子邮件地址,并在按“提交”按钮后向他们发送邀请。每封电子邮件必须用逗号分隔,并且在提交表单之前有效 - 验证由jQuery 验证插件 http://jqueryvalidation.org/ & 多电子邮件方法 https://stackoverflow.com/questions/10352221/jquery-validation-plugin-multiple-email-addresses.

Problem

有些人直接从电子邮件客户端粘贴电子邮件地址,而这些电子邮件通常采用奇怪的格式 - 在实际电子邮件之前包含姓名,或者电子邮件包含在 中。例如:"The Dude" <the.d[email protected] /cdn-cgi/l/email-protection>, "The Dudette" <[email protected] /cdn-cgi/l/email-protection>

Question

我想做的是使用 jquery 从批量文本中提取所有电子邮件地址 https://stackoverflow.com/questions/14440444/extract-all-email-addresses-from-bulk-text-using-jquery,但是我在将这段代码集成到我的代码中时遇到问题textarea- 我不知道从哪里开始。

我如何使用上面答案中的代码来提取输入到的每封电子邮件textarea键入逗号后或焦点移离textarea?所以如果我粘贴"The Dude" <[email protected] /cdn-cgi/l/email-protection>并输入,之后或将焦点移开,输入的值将更改为[email protected] /cdn-cgi/l/email-protection.


我猜是这样的:

var textarea = $('#emails');

textarea.on({
    keyup: function(e) {
        if (e.which === 188) check();
    },
    blur: check    
});

function check() {
    var val  = $.trim(textarea.val()),
        err  = '';

    if (!val.length) {
        err = 'No input ?';
        return;
    }

    var emails   = val.split(','),
        notvalid = [],
        temp     = [];

    $.each(emails, function(_,mail) {
        mail = $.trim(mail);
        if ( mail.length ) {
            var m = mail.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
            if (m) {
                temp.push(m);
            }else{
                temp.push(mail);
                notvalid.push(mail)
            }
        }else{
            temp.push(mail);
        }
        if (notvalid.length) err = 'Not valid emails : ' + notvalid.join(', ');
    });

    $('#error').html(err);
    textarea.val((temp.length ? temp : emails).join(', '));
}

FIDDLE http://jsfiddle.net/242hY/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测何时将文本输入到文本区域并相应地更改它 的相关文章

随机推荐