Javascript 检测文本何时输入文本区域并相应更改

Javascript 检测文本何时输入文本区域并相应更改,javascript,jquery,forms,jquery-validate,Javascript,Jquery,Forms,Jquery Validate,我有一个文本区,用户可以在这里输入或粘贴其他人的电子邮件地址,并在按下提交按钮后向他们发送邀请。在提交表格之前,每封电子邮件必须用逗号分隔并有效-验证由& 问题 有些人直接从他们的电子邮件客户端粘贴电子邮件地址,这些电子邮件通常采用奇怪的格式——在实际电子邮件之前包含姓名,或者电子邮件用包装。例如: “花花公子”、“花花公子” 问题 我想做的是,但是我在集成这段代码与我的textarea工作时遇到了问题-我不知道从哪里开始 键入逗号后或焦点从textarea移开时,如何使用上述答案中的代码提取输

我有一个
文本区
,用户可以在这里输入或粘贴其他人的电子邮件地址,并在按下提交按钮后向他们发送邀请。在提交表格之前,每封电子邮件必须用逗号分隔并有效-验证由&

问题

有些人直接从他们的电子邮件客户端粘贴电子邮件地址,这些电子邮件通常采用奇怪的格式——在实际电子邮件之前包含姓名,或者电子邮件用<>包装。例如:
“花花公子”、“花花公子”

问题

我想做的是,但是我在集成这段代码与我的
textarea
工作时遇到了问题-我不知道从哪里开始


键入逗号后或焦点从
textarea
移开时,如何使用上述答案中的代码提取输入到
textarea
的每封电子邮件?因此,如果我粘贴
“花花公子”
并在其后面键入
,或将焦点移开,输入的值将更改为
。dude@gmail.com

您可以使用eventhandler检测文本区域(或其他输入字段)何时更改。Jquery支持多个事件(请看这里)。在这种特殊情况下,我应该使用keyup事件来触发extractEmails函数。这样,您的提取将是“活的”。但是,也可以捕捉模糊或更改事件

使用keyup事件处理程序


我猜是这样的:

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(', '));
}

这将在您失去焦点或按要求输入逗号时,将输入的文本转换为电子邮件:

function extractEmails (text)
{
    return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}

$("#emailtext").on('keypress blur', function(e) {

    if (e.which === 44 || e.type =="blur")
    {
        $('#emails').text(extractEmails($("#emailtext").val()));
    }
});
这是小提琴:


类似问题检查此处,以获取他引用的同一问题的答案。事实上,他的问题一定是“如何将事件处理程序绑定到textarea”,请在逗号后重新考虑验证。。在最后一封电子邮件之后,您不会按逗号键。。您不想验证它吗?例如,更改后2秒?@Dropout是的,这就是为什么我还需要焦点移到其他位置时验证:)
function extractEmails (text)
{
    return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}

$("#emailtext").on('keypress blur', function(e) {

    if (e.which === 44 || e.type =="blur")
    {
        $('#emails').text(extractEmails($("#emailtext").val()));
    }
});