我正在从gmail和yahoo检索用户的所有联系人,我添加了复选框,用户需要选择他需要发送电子邮件的所需电子邮件ID。我需要收集所有用户选择的电子邮件ID并将其保存在一个字符串中,将该字符串发送到我发送电子邮件的另一个servlet。
我能够动态添加复选框,但我无法收集电子邮件并将其保存在字符串中。这是我在所有电子邮件之前添加复选框的代码, 请帮助我将选定的电子邮件ID放在字符串中
我使用了以下代码,但我仍然无法执行此操作。您可以查看此应用的演示http://ec2-50-16-183-101.compute-1.amazonaws.com/SocialAuthNew/ 要从Gmail中获取联系人,请在文本框中输入google,然后输入yahoo类型的yahoo,然后单击“提交”按钮
List<Contact> contactsList = provider.getContactList();
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><script type='text/javascript'>");
out.println("function getAllContacts(size){ var selected_list='';");
out.println("for(var c=0;c<size;c++){if(document.getElementById('mailCheckbox'+c).checked==true){selected_list=selected_list+document.getElementById('lblmail'+c).innerHTML+':';}}");
out.println("document.getElementById('final_mailing_list').innerHTML=selected_list;}</script>");
out.println("<title></title>");
out.println("</head>");
out.println("<body>");
for(int i=0;i<contactsList.size();i++){
System.out.println(contactsList.get(i).getFirstName()+" : "+contactsList.get(i).getLastName()+":"+contactsList.get(i).getEmail());
out.println("<h1> Imported conatcts from your mail are:-</h1>");
out.println("<input type='checkbox' id='mailCheckBox"+i+"' name='mailCheckbox'></input>");
/* out.println(contactsList.get(i).getFirstName());
out.println(contactsList.get(i).getLastName());*/
out.println("<label id='lblmail"+i+"'>"+contactsList.get(i).getEmail()+"</label>");
}
int size=contactsList.size();
out.println("<input type='button' value='GetContact' onclick='getAllContacts("+size+");'/> ");
out.println("<div id='final_mailing_list'></div></body>");
out.println("</html>");
}
答案 0 :(得分:3)
试试这个:
1)将您的电子邮件包装在DOM元素中以便于访问
out.println("<span>" + contactsList.get(i).getEmail() + "</span>");
2)使用例如JQuery用于规范化对客户端DOM的访问,执行
function getSelectedEmails() {
var emails = [];
$('body').find('input[name="mailCheckbox"]:checked').each(function() {
emails.push($(this).closest('span').text());
});
return emails;
}
这将返回数组中的电子邮件 - 如果您愿意,可以轻松地将其连接成一个字符串。
var emailString = emails.join(", ");
...虽然我认为使用数组通常更好(如果你需要序列化它可能是JSON编码的。)
答案 1 :(得分:1)
实现这一目标的一种更原始的方法,
正如您现在所做的那样创建一堆Check-Box,但区别在于所有的htem应该具有相同的名称,即在代码中进行以下更正
out.println("<input type='checkbox' id='mailCheckBox' name='mailCheckbox'></input>");
现在使用以下对请求对象的调用
检索服务器端此类文本框的所有值 String[] emailIds = request.getParameterValues("mailCheckBox");
希望这有帮助。
答案 2 :(得分:1)
使用数组要容易得多。我使用了数组,并将复选框名称作为check1,并在单击提交按钮时调用了以下函数。此函数会警告所选复选框的值,并将操作传递给servlet
<script>
function onCallForInterview()
{
var selectedIds;
var count=0;
for (i=0; i<document.frm.check1.length; i++)
{
if (document.frm.check1[i].checked==true)
{
if(count==0){
selectedIds=document.frm.check1[i].value;
count=count+1;
}
else
selectedIds=selectedIds+","+document.frm.check1[i].value;
}
}
alert(selectedIds);
document.frm.action="<%=contextPath%>/SearchCandInfo? action=selectcanforinterview&ids="+selectedIds;
document.frm.submit();
}
</script>