我正在编写一个简单的脚本,通过ajax将注册表单提交到我的网站。它在现代浏览器中完美运行。在IE9中,表单只能正确提交一次。然后,如果我再次尝试提交相同的表单,第二次表单永远不会返回,加载程序gif将永久保留。知道为什么会这样吗?
编辑:我应该指出我正在使用此jquery form plugin提交表单。其次,当我在提交表单后检查源代码时,会出现正确的标记。我可以手动添加不透明样式来显示表单,所以我认为这表明问题是连接到IE9和jquery淡入淡出函数。
<script type="text/javascript">
jQuery.fn.outerHTML = function(s) {
return (s)
? this.before(s).remove()
: jQuery("<p>").append(this.eq(0).clone()).html();
}
jQuery(document).ready(function($){
$("form input").removeAttr('tabindex');
ajaxregister = function(e) {
e.preventDefault();
$(this).fadeTo(500, 0);
$(this).siblings("#loading").fadeIn();
$(this).ajaxSubmit({
//url:'http://streetofwalls.dev/wp-login.php?action=register'
success: function( data ) {
//console.log(data);
var $message = $(data).find('.message').outerHTML();
var $error = $(data).find('#login_error').outerHTML();
var $form = $(data).find('#registerform').outerHTML();
console.log( 'success' );
$(e.target).html( ( ($error) ? $error : $message ) + $form ).fadeTo(500,1);
$(e.target).siblings("#loading").fadeOut();
}
});
}
$(".widget_reg_widg #registerform").submit( ajaxregister );
});
</script>
答案 0 :(得分:1)
在某些IE浏览器中,您必须重新定义事件变量:
ajaxregister = function(e) {
e = e || window.event;
e.preventDefault();
...
}
答案 1 :(得分:0)
在jquery代码中使用cache:false
。
示例:
$(this).ajaxSubmit({
cache : false,
//existing code
});
答案 2 :(得分:0)
我通过用jquery选择器替换e.target
来实现这一点。请参见成功的最后几行:function(){...
success: function( data ) {
var $message = $(data).find('.message').outerHTML();
var $error = $(data).find('#login_error').outerHTML();
var $form = $(data).find('#registerform').outerHTML();
var target_id = $(e.target).attr("id");
$("#"+target_id).html( ( ($error) ? $error : $message ) + $form ).animate({opacity:1}, 500);
$("#"+target_id).css('display', 'block');
$("#"+target_id).siblings("#loading").css('display', 'none');
}
不确定为什么会有效。它必须与IE9引用事件的方式有关。