我有一个链接很少的页面。每个链接都应在 Fancybox 上打开一个表单,从中发送邮件。所有链接的形式基本相同,只是标题和邮件地址不同。我需要 jQuery 来构建一个动态表单,其中隐藏的字段将保存一个锚点以从数据库中获取邮件地址。我需要 jQuery 根据链接 ID 或链接名称为每个 Fancybox 设置标题。我找到了一些教程并对其进行了一些更改。它可以工作,但如果我将 js 脚本分离到不同的文件,我会收到一个带有错误消息的 Fancybox,“无法加载请求的内容。请稍后再试。”
<!doctype html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="fancybox/jquery.fancybox.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="fancybox/jquery.fancybox.js"></script>
</head>
<body>
<div id="wrapper">
<p>Send Email from Fancybox form.</p>
<p><a class="modalbox" href="#inline">click to open</a></p>
</div>
<script type="text/javascript">
function validateEmail(email) {
var reg = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return reg.test(email);
}
var $div = $( "<div id='inline'><h2>Send us a Message</h2></div>").hide();
var $contact = $("<form id='contact' name='contact' action='#' method='post'><label for='email'>Your E-mail</label><input type='email' id='email' name='email' class='txt'><br><label for='msg'>Enter a Message</label><textarea id='msg' name='msg' class='txtarea'></textarea><button id='send'>Send E-mail</button></form>");
$div.append($contact);
$("body").append($div);
$(document).ready(function() {
$(".modalbox").fancybox({
closeEffect : 'none',
'afterClose':function () {
window.location.reload();
},
});
$("#contact").submit(function() { return false; });
$("#send").on("click", function(){
var emailval = $("#email").val();
var mailvalid = validateEmail(emailval);
if(mailvalid == false) {
$("#email").addClass("error");
}
else if(mailvalid == true){
$("#email").removeClass("error");
}
if(mailvalid) {
// first we hide the submit btn so the user doesnt click twice
$("#send").replaceWith("<em>sending...</em>");
$.ajax({
type: 'POST',
url: 'sendmessage.php',
data: $("#contact").serialize(),
success: function(data) {
if(data == "true") {
$("#contact").fadeOut("fast", function(){
$(this).before("<p><strong>Success! Your feedback has been sent, thanks :)</strong></p>");
setTimeout("$.fancybox.close()", 1000);
});
}
}
});
}
});
});
</script>
</body>
</html>
当我将 js 分离到不同的文件时,原始 html 有效:
<div id="wrapper">
<p>Send Mail from Fancybox form.</p>
<p><a class="modalbox" href="#inline">click to open</a></p>
</div>
<!-- hidden inline form -->
<div id="inline">
<h2>Send Mail</h2>
<form id="contact" name="contact" action="#" method="post">
<label for="email">Your E-mail</label>
<input type="email" id="email" name="email" class="txt">
<br>
<label for="msg">Enter a Message</label>
<textarea id="msg" name="msg" class="txtarea"></textarea>
<button id="send">Send E-mail</button>
</form>
</div>
从链接创建动态 div 和表单的正确方法是什么?