检测文本何时被输入到文本区域中,并相应地进行更改。

4
我有一个

类似的问题可以在这里查找答案:https://dev59.com/2GYq5IYBdhLWcg3wfgrd - Sunil Verma
他在引用同一个问题。实际上,他的问题应该是“如何将事件处理程序绑定到文本区域”。 - kasper Taeymans
在逗号后重新考虑验证...您不会在最后一个电子邮件后按逗号键..您不想在更改后例如2秒钟内进行验证吗? - Dropout
@Dropout 是的,这就是为什么我还需要焦点移动到其他地方时的验证 :) - dTilen
3个回答

3
您可以使用事件处理程序检测textarea(或其他输入字段)何时更改。Jquery支持多个事件(请查看此处http://api.jquery.com/category/events/)。在这种情况下,我应该使用keyup事件来触发extractEmails函数。这样您的提取将是“实时”的。但是,也可以通过捕获模糊或更改事件来实现。
使用keyup事件处理程序: 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);
}

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


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

这是一个fiddle示例:

http://jsfiddle.net/Mj2KM/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接