提交按钮在IE/Safari中不起作用,在Chrome中起作用,但表单信息无法通过


Submit button not working in IE/Safari, works in Chrome but form info is not getting passed

我有一个表单设置,但由于某种原因,提交表单的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,则浏览器将允许提交。