我有一个表单设置,但由于某种原因,提交表单的JS可以在Chrome中使用,但不能在IE9或Safari中使用。有趣的是,在Chrome中,提交按钮确实有效,没有任何信息被传递。
这是我的提交按钮-
<a href="javascript: validate(); return false;"><img type="submit" src="lib/send_feedback.jpg" border="0" class="feedback-submit-img" /></a>
以下是JS所称的
// Submit form to next page
function submitForm() {
// document.forms["feedbackform"].submit();
document.feedbackform.submit();
}
// Submit form and validate email using RFC 2822 standard
function validateEmail(email) {
// Modified version original from: http://stackoverflow.com/a/46181/11236
var re = /^(([^<>()[']''.,;:'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 re.test(email);
}
// Return true if email field is left unchanged
function originalText(email){
var defaultMsg;
defaultMsg = "Enter your email address (optional)";
if(defaultMsg == email){
return true;
}
return false;
}
// Verify or decline with error message
function validate(){
$("#result").text("");
var email = $("#email").val();
if ((validateEmail(email)) || originalText(email)) {
submitForm();
} else {
$("#result").text(email + " is not a valid email.");
$("#result").css("color", "red");
}
return false;
}
$("form").bind("submit", validate);
对于我的问题的第二部分,可能与JS问题有关,也可能与JS无关,它是-
echo $POST['satisfaction'];
echo $POST['user_email'];
echo $POST['comments'];
if(isset($POST['user_email'])){
echo 'true';
} else {
echo 'false';
}
如果你想更好地查看我正在编辑的页面,这里有一个jsfiddle 的链接
编辑
根据Marco的请求,我删除了提交按钮周围的链接,并将onClick事件放置在实际按钮上。这绝对解决了IE和Safari上的问题。现在,我剩下的问题/担忧是为什么POST数据没有正确传递到下一页。
这是乔治要求的完整消息来源index.php
页面源被传递到-feedback-acept.php
同样,既然如此,StackOverflow的首选网站是什么?
针对Brian的评论,如果我不能在不破坏POST数据的情况下使用failed,那么什么是好的替代方案/解决方案?
尝试此代码:
jQuery:
$(document).ready(function()
{
$('.validate').bind('submit click',function()
{
//Validate!
//is email
if( /..../.test( $(this).find('input[name=email]').val() ) )
{
alert('Error!!!');
return false; //STOP PROPAGATION
}
//Its okay!
//send form!
$(this).parents('form').submit();
//click event stop propagation
return false;
});
});
HTML:
<a href="" class="validate">Submit</a>
或
<input type="submit" value="Submit" class="validate" />
或
<button class="validate" >Submit</button>
快速查看一下,我想说您在这里遇到了函数冲突。当你设计一个Submit Type时,你告诉浏览器,它将提交你的表单(关于它的操作),另一方面,它位于调用JS函数的链接内。如果你在JS中制造提交,试着考虑不使用提交类型,看看它是否更正常。您还可以尝试在表单的Tag中替换一个简单的"onSubmit"链接,并从那里调用JS函数。这样,当浏览器识别出用户点击了提交按钮时,他会根据您的意愿调用JS函数,如果该函数返回true,则浏览器将允许提交。