我正在尝试使用以下代码段的EmailJS.com服务: HTML部分:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Daily Report</title>
<script src="https://cdn.emailjs.com/dist/email.min.js"></script>
<script src="tst.js"></script>
<noscript>Please enable JavaScript.</noscript>
</head>
<body onLoad="today()">
<h1 id="today"></h1>
<hr>
<form onSubmit="draft()">
<fieldset>
<legend>Message</legend>
<textarea id="shout" rows="2" cols="97">TEST.</textarea><br>
<input type="submit" value="Email">
</fieldset>
</form>
</body>
</html>
JavaScript部分:
var s = new Date().toDateString();
function today() {
emailjs.init("EMAILJSASSIGNED");
document.getElementById("today").innerHTML = s;
}
function draft() {
var m = s + "<br>";
m += document.getElementById("shout").value + "<br>";
emailjs.send("EMAILJS_service", "TEMPLATE", {"body":m});
//alert(m);
}
我发现代码工作(即,根据我的模板规格通过电子邮件发送)只有在我添加alert(m)
行时才会发生。好像alert
触发了一个提交事件来执行emailjs.send()。没有警报,emailjs.send被&#34;跳过&#34;。我不明白为什么。
答案 0 :(得分:2)
在没有提醒的情况下发送电子邮件的原因是,一旦您提交表单,页面就会重新加载,浏览器也没有机会完成emailjs.send()请求。
一个简单的解决方案是添加&#34;返回false&#34;到onSubmit语句,如下:
<form onSubmit="draft(); return false;">
这样可以防止提交表单,因此如果您确实需要将表单提交给服务器,那么在解决了emailjs.send()返回的promise之后,您需要异步执行此操作。
您可以在这里阅读有关emailjs.send()语法的更多信息,包括和不使用promises: https://www.emailjs.com/docs/api-reference/emailjs-send/
希望这有帮助!