Detecta cuando se ingresa text en el área de text y cámbialo correspondientemente

Tengo un área de textarea donde los usuarios pueden ingresar o pegar direcciones de otras personas y enviarles una invitación luego de presionar el button Enviar. Cada correo electrónico debe separarse con una coma y ser válido antes de enviar el formulario. La validation se realiza mediante jQuery Validate plugin & multiemail method .

Problema

Algunas personas pegan las direcciones de correo electrónico directamente de sus clientes de correo electrónico y esos correos a menudo tienen un formatting extraño: contienen el nombre y el apellido antes del correo electrónico real, o el correo electrónico está envuelto en <>. Por ejemplo: "The Dude" <the.dude@gmail.com>, "The Dudette" <thedudette193@gmail.com>

Pregunta

Lo que quiero hacer es extraer todas las direcciones de correo electrónico del text masivo usando jquery , pero estoy teniendo problemas para integrar este código para trabajar con mi área de textarea : no sé por dónde empezar.

¿Cómo podría usar el código de la respuesta anterior para extraer cada correo electrónico ingresado en el área de textarea después de escribir una coma o cuando el foco se aleje del área de textarea ? Así que si "The Dude" <the.dude@gmail.com> y "The Dude" <the.dude@gmail.com> , después de esto o si cambio el foco, el valor ingresado cambiará a the.dude@gmail.com .

Estoy adivinando algo como esto:

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

VIOLÍN

puede detectar cuándo se cambia un área de text (u otro campo de input) utilizando un manejador de events. Jquery admite múltiples events (mira aquí http://api.jquery.com/category/events/ ). En este caso particular, debería usar el evento de keyboard para activar la function extractEmails. De esta forma su extracción será "en vivo". Sin embargo, también es posible al capturar un desenfoque o evento de cambio.

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

Esto convertirá el text ingresado en posts de correo electrónico cuando pierdes el foco o ingresas una coma, como solicitaste:

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

Aquí está el violín:

http://jsfiddle.net/Mj2KM/