我正在编写一个Google Chrome扩展程序,需要在新的GMail电子邮件的“收件人”字段中捕获地址。这就是我目前正在使用的(正在使用jQuery 2.0.2):
$('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
位于提醒框内。
我的问题是,当我按.val()
时,为什么“To”字段的Enter
会出现空字符串?
谢谢!
答案 0 :(得分:4)
Gmail's to Field不像textarea那样工作,它从文本中获取电子邮件,并为文本区域之前的每封电子邮件创建一个div。
你应该检查DOM,看看那里发生了什么。
以下是代码的相关部分。
<div class="vR">
<span class="vN vQ" email="email1@example.com">
<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="email2@example.com">
<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(", "));
});