2

我的一些表单是用 Javascript/JQuery 提交的,所以不会发生页面刷新。

但是我注意到我的两台计算机之间的浏览器有一种奇怪的行为。在一台计算机(以及我测试过的所有浏览器)上,我的表单提交按预期执行。我的另一台电脑 (Mac) 时好时坏。我将提交表单,它会执行典型的 POST 刷新。所以浏览器刷新了,我在 Url 地址栏中看到了我的按钮文本。

- 再次,我的电脑的浏览器不这样做。

除非我快疯了,否则我只能推断我 Mac 上的浏览​​器没有正确执行 javascript。但我更准备好在我的编码方面出现错误。

我是否正确确保表单没有与我的 Javascript 一起提交?

<form id="norefreshForm">
   <!--more form fields here -->
   <input type="submit" name="button" value="Submit Me" />
</form>

<script language="javascript" type="text/javascript">
$(document).ready(function(){

    $.ajaxSetup({
       global:false,
       cache:false,
       type:"POST",
       url:"<?=$_SERVER['REQUEST_URI'];?>",
       timeout:120000   
    });


    $("form#norefreshForm").submit(function(){

        $.ajax({ success:function(response){ alert("Submitted"); } });
        return false;
    });

});
</script>
4

4 回答 4

0

尝试这个:

$("form#norefreshForm").submit(function(e){
        $.ajax({ success:function(response){ alert("Submitted"); } });
        e.preventDefault();
});
于 2013-01-09T06:56:03.923 回答
0

在您的表单中尽量不要使用提交按钮。相反,您可以使用一个简单的按钮并在单击此按钮时绑定 ajax 调用。

这样做的原因似乎是您同时发出两个请求,一个是通过提交按钮,另一个是您自己的 ajax 函数。

第一次提交也失败了,因为您没有为表单指定 action 属性。

于 2013-01-09T07:15:27.060 回答
0

当您仅使用 jQuery 时,返回 false 就足够了。(不是 100% 确定 mac)

但是,如果您还编写了纯 javascript,那么在这种情况下您可能还必须使用preventDefaultor stopPropagation

在 IE 的情况下,它更加不同。有时您将不得不使用window.event.returnValue = false;

因此,所有这些的组合将正常工作。

因此,将您的return false陈述替换为

if (eventObject.preventDefault) {
    eventObject.preventDefault();
} else if (window.event) /* for ie */ {
    window.event.returnValue = false;
}
return false;

这适用于 PC 和 MAC

快乐编码!!!

于 2013-01-09T07:10:42.297 回答
0

实际上有些浏览器你应该做e.preventDefault()而不是,return false;我真的不知道为什么。但它发生在我身上很多。所以,你可以这样做:

 $("form#norefreshForm").submit(function(){
        e.preventDefault();//should be at the very top 
        $.ajax({ success:function(response){ alert("Submitted"); } });

    });

});
于 2013-01-09T07:00:56.470 回答