2013-07-10 58 views
0

我正在编写一个Google Chrome扩展程序,需要在新的GMail电子邮件的“收件人”字段中捕获地址。这是我目前正与合作(jQuery的2.0.2正在使用):在Chrome扩展程序中获取GMail的“收件人”字段

$('textarea[name="to"]').bind("enterKey",function(e){ 
     alert($('textarea[name="to"]').val()); // this is definitely the "To" field 
}); 
$('textarea').keyup(function(e){ 
     if(e.keyCode == 13) { 
     $(this).trigger("enterKey"); 
} 
}); 

每次我按在Enter以上面的代码中,一个空alert()箱火灾现场。但是,如果我将alert()更改为显示任意值,例如alert('david');,则消息david位于警报框内。

我的问题是,当我按Enter时,为什么有一个空字符串脱离“收件人”字段的.val()

谢谢!

+1

顺便说一句,不要使用'e.keyCode' - jQuery的正常化的关键代码到'e.which' ...使用它。此外,只需使用'$(this).val()',因为在DOM中可能会有多个'textarea [name =“to”]'元素 – Ian

回答

4

Gmail的字段不像textarea那样工作,它会从文本中获取电子邮件,并在文本区域之前为每封电子邮件创建一个div。

您应该检查DOM,看看发生了什么。

这里是代码的相关部分。

<div class="vR"> 
    <span class="vN vQ" email="[email protected]"> 
    <div class="vT">email1</div> 
    <div class="vM"></div> 
    </span> 
    <input name="to" type="hidden" value="email1"> 
</div> 
<div class="vR"> 
    <span class="vN vQ" email="[email protected]"> 
    <div class="vT">email2</div> 
    <div class="vM"></div> 
    </span> 
    <input name="to" type="hidden" value="email2"> 
</div> 
<textarea rows="1" id=":2y" class="vO" name="to" spellcheck="false" autocomplete="false" tabindex="1" dir="ltr" aria-haspopup="true" style="width: 950px;"></textarea> 

这样你就可以得到电子邮件这样,

$('textarea[name="to"]').bind("enterKey", function(e){ 
    var emails = []; 
    $(this).siblings("div.vR").find("span.vN").each(function() { 
     emails.push($(this).attr("email")); 
    }) 
    alert(emails.join(", ")); 
}); 
+2

一年过去了,没有人注意到' alert(emails.join(“,”);':D –

相关问题