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

时间:2013-10-04 11:00:35

标签: javascript jquery forms jquery-validate

我有一个textarea,用户可以在其中输入或粘贴其他人的电子邮件地址,并在按下“提交”按钮后向他们发送邀请。在提交表单之前,每封电子邮件必须用逗号分隔并且有效 - 验证由jQuery Validate plugin&处理完成。 multiemail method

问题

有些人直接从他们的电子邮件客户端粘贴电子邮件地址,这些电子邮件通常是一种奇怪的格式 - 在实际电子邮件之前包含姓名和姓氏,或者电子邮件包含在&lt;取代。例如: "The Dude" <the.dude@gmail.com>, "The Dudette" <thedudette193@gmail.com>

问题

我想要做的是Extract all email addresses from bulk text using jquery,但我在整合这段代码时遇到问题需要与textarea合作 - 我不知道从哪里开始。

如何在输入逗号或将焦点从textarea移开后,使用上述答案中的代码提取输入textarea的每封电子邮件?因此,如果我粘贴"The Dude" <the.dude@gmail.com>并在其后面键入,或切换焦点,则输入的值将更改为the.dude@gmail.com

3 个答案:

答案 0 :(得分:3)

您可以使用事件处理程序检测textarea何时更改(或其他输入字段)。 Jquery支持多个事件(看看http://api.jquery.com/category/events/)。在这种特殊情况下,我应该使用keyup事件来触发extractEmails函数。这样你的提取将是“活的”。但是,通过捕捉模糊或改变事件也是可能的。

  

使用keyup eventhandler

     

http://jsfiddle.net/kasperfish/9hLtW/5/

$('#text').on('keyup',function(event) {
    emails=extractEmails($(this).val());
    $("#emails").text(emails);
});

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

答案 1 :(得分:3)

我猜是这样的:

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

答案 2 :(得分:1)

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

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

这是小提琴:

http://jsfiddle.net/Mj2KM/