我已经在其他地方看到了同样的问题,但到目前为止我找到的解决方案都没有解决我的问题:
我在$(#form).submit中使用$ .post通过AJAX提交表单,因此用户不会离开页面。它在IE中只是花花公子,但FF和Chrome都使用表单字段名称和查询字符串中的值刷新当前页面,可能是因为表单没有指定action =“”。如果我重命名指定的函数,我可以让IE复制问题,因为IE无法找到正确执行$ .post的函数,它也会刷新当前页面的表单字段名称和值查询字符串。
表单是动态创建的,需要在表单名称中包含随机数,以便一次可以看到多个表单。我不认为这是问题的一部分,因为表单名称总是在所有浏览器的alert()中正确显示。
function add_new_product(){
var formName = "frm_add_new_product_" + window.random_number_for_IDs;
alert('this alert is BEFORE the (#formname).submit');
$("#" + formName).submit(function(event) {
alert('this alert is inside the (#formname).submit BEFORE .preventDefault');
event.preventDefault();
alert('this alert is inside the (#formname).submit AFTER .preventDefault but BEFORE $.post');
$.post("add_new_product.php?SiteID=<?php echo $_GET['SiteID']; ?>", $("#" + formName).serialize(), function(data){$("#DIV_new_product_name_" + window.random_number_for_IDs).html(data);});
alert('this alert is inside the (#formname).submit AFTER $.post');
});
alert('this alert is AFTER the (#formname).submit');
$("#DIV_new_product_form_" + window.random_number_for_IDs).fadeOut(100, function(){$("#DIV_new_product_name_" + window.random_number_for_IDs).fadeIn(100);});
}
在IE中,我看到所有alert()但不按上面指定的顺序。它首先显示$(#form).submit之前和之后的那些,然后是里面的那些。 FF和Chrome只显示$(#form).submit之前和之后的alerts(),但不会显示内部的那些。
答案 0 :(得分:0)
修正:
我从“add_new_product();”更改了表单的onSubmit to“javascript:add_new_product(); return false;”因为preventDefault不会“阻止”表单提交的“默认”操作。这就是为什么页面只会刷新查询字符串中的字段名称和值,因为在表单标记中没有指定“action”,无论出于何种原因,preventDefault都没有发生。我也尝试过“返回假”;在注释掉preventDefault之后的函数内部,但它仅在标记的onSubmit中有效。
然后我注释掉了add_new_product()脚本中的每一行,除了连接动态表单名称的第一行,$ .post行,以及淡出ajax响应填充的淡出和淡出的最后一行通过.html(数据)
适用于所有三种浏览器。