这有点难以解释。我有一个包含数百个医院和医生列表的搜索结果页面。页面加载时,每条记录都会加载到一个 javascript 数组中,因此无需重新加载页面即可访问所有记录。用户还可以单击“详细信息”页面,该页面显示每个医院或医生的详细信息。这也是动态的,不需要重新加载页面。
这就是我的问题所在。
在每个详细信息页面上,用户都可以共享(通过电子邮件发送)医院/医生信息。我的问题是,如果用户尝试一个接一个地共享多个医院/医生列表,该mailto
链接似乎会打开用户之前打开的每个电子邮件实例。
单击医院 A 上的共享会打开医院 A 的电子邮件窗口。关闭此共享窗口,然后单击医院 C 的共享会打开 2 个窗口 - 医院 A 和医院 C - 就好像正在存储所有连续共享的数组一样。令人困惑,是的,我知道:-)
让我稍微分解一下代码。详细信息页面由函数处理showDetails(id)
。该id
参数是正在显示其详细信息的记录,并且在此详细信息页面中有共享按钮。这是函数的概述(非常简洁):
function showDetails(id) {
// make visual transitions to details page //
rec = new Array();
// get this record (rec)
for( var i = 0; i < results.length; i++){
if (results[i]['row_id'] == id){
rec = results[i];
break;
}
}
// set record variables
var longName = rec['longName'];
var city = rec['city'];
var state = rec['state'];
...
// output variables into lovely html //
// handle Share button. I think this is where my issue is
$(document).ready(function(){
$("a[rel='email']").each(function(){
// Modify the mailto: value
var mailtoVal = $(this).attr('href');
var body_message = '';
body_message += longName+"%0D%0A%0D%0A ";
body_message += address.replace("<br>","%0D%0A") +"%0D%0A ";
body_message += city+", "+state+" "+zipCode+"%0D%0A ";
body_message += phoneFormat(phone)+"%0D%0A %0D%0A ";
body_message += emailAddress+"%0D%0A ";
body_message += shortURL+"%0D%0A ";
mailtoVal = 'mailto:name@domain.com?subject=Provider Information&body='+body_message;
$(this).click(function(){
window.location.href = mailtoVal;
return false;
});
});
});
}
在下面,这段代码是我的实际链接:
<a class="button" href="#" rel="email">Share</a>
就像我之前说的,当我在页面加载时为我的第一条记录单击“共享”按钮时,这可以正常工作。如果我打开另一个,我的第一个和第二个共享都会打开。
当我调试时,我可以看到mailtoVal
从未设置为适当的值。几乎就像它将每个连续的共享存储为一个数组一样,并在单击共享时循环遍历它们中的每一个。
我的直觉告诉我,我需要做一些事情setTimeout
或某种异步编码,但我对最好的方法有点模糊。
最好在showDetails()
处理共享之外创建另一个函数吗?我推迟了这样做,因为我需要接收 ID 作为参数并再次检索 ID... 的结果。
请注意——这段代码的大部分不是我写的。我在开发周期的后期被分配到这个项目,现在我只是在尝试调试它。
我知道这有点令人困惑,所以如果需要任何其他信息,请告诉我。