使用Javascript提交表单
我的一些表单是用Javascript/JQuery提交的,因此不会刷新页面 但我注意到我的两台电脑之间的浏览器有一种奇怪的行为。 在一台计算机(以及我测试过的所有浏览器)上,我的表单提交按预期执行。 我的另一台电脑(Mac)坏了。我将提交表单,它将进行典型的后期刷新。所以浏览器会刷新,我会在Url地址栏中看到我的按钮文本 -同样,我的电脑的浏览器不这样做 除非我疯了,否则我能推断的就是Mac上的浏览器没有正确执行javascript。但我更愿意看到我的编码端出现错误 我是否正确地确保表单没有与我的Javascript一起提交使用Javascript提交表单,javascript,jquery,forms,Javascript,Jquery,Forms,我的一些表单是用Javascript/JQuery提交的,因此不会刷新页面 但我注意到我的两台电脑之间的浏览器有一种奇怪的行为。 在一台计算机(以及我测试过的所有浏览器)上,我的表单提交按预期执行。 我的另一台电脑(Mac)坏了。我将提交表单,它将进行典型的后期刷新。所以浏览器会刷新,我会在Url地址栏中看到我的按钮文本 -同样,我的电脑的浏览器不这样做 除非我疯了,否则我能推断的就是Mac上的浏览器没有正确执行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>
$(文档).ready(函数(){
$.ajaxSetup({
全球:错,
cache:false,
类型:“POST”,
url:“”,
超时:120000
});
$(“表单#norefreshForm”).submit(函数(){
$.ajax({success:function(response){alert(“Submitted”);}});
返回false;
});
});
试试这个:
$("form#norefreshForm").submit(function(e){
$.ajax({ success:function(response){ alert("Submitted"); } });
e.preventDefault();
});
实际上,有些浏览器应该执行
e.preventDefault()
,而不是返回false我真的不知道为什么。但这件事经常发生在我身上。因此,您可以这样做:
$("form#norefreshForm").submit(function(){
e.preventDefault();//should be at the very top
$.ajax({ success:function(response){ alert("Submitted"); } });
});
});
当您仅使用jQuery时,返回false就足够了。(对mac不是100%确定)
但是如果您还编写了纯javascript,那么在这种情况下,您可能还必须使用preventDefault
或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
快乐编码 在表单中,尽量不要使用提交按钮。相反,您可以使用一个简单的按钮并在单击此按钮时绑定ajax调用
这样做的原因似乎是您同时发出两个请求,一个是通过提交按钮,另一个是您自己的ajax函数
第一次提交也会失败,因为您没有为表单指定action属性。是否启用了javascript?这是第一个check@coffeemonitor你的代码正在运行,看看这里:(在Chrome和Firefox中测试)你得到解决方案了吗?原来这是一个浏览器问题。我已经在几台计算机和主要浏览器上进行了测试,我的Mac上的Chrome似乎不能很好地与javascript配合使用。return false
。问题是另外一个。我认为jQuery规范化了e.preventDefault
,可以在所有浏览器中工作。@elclanrs,是的,你可能是对的。但我还是使用了.preventDefault,而不是在ajax案例中返回false。以防万一。但是我真的希望如果jquery的人能解释一下!!jQuery明确地规范化了e.preventDefault()
和返回false代码>。(如果您返回false
jQuery调用event.preventDefault()
)另外,Mamdouh,您是否愿意解释一下为什么您认为e.preventDefault()
“应该”在最上面“?再读一遍我的答案。我说过这件事经常发生在我身上,我就是这样解决的。如果你有任何其他想法,请分享,因为这对我来说也是模棱两可的:)顺便说一句,这可能是浏览器问题,而不是JQ问题。只是一个想法@nnnnnnnn当按下提交按钮时,它触发提交事件,然后由OP显示的函数处理,该函数返回false
以取消默认提交。无需更改按钮类型即可执行此操作。