[英]AJAX-enabled form will only submit once using AJAX, then defaults to HTTP request
启用AJAX的表单仅使用AJAX提交一次,然后默认使用标准HTTP请求。 代码如下:
$('#urlContainer form').submit(function(){
var p = {};
p['url'] = $('input#url').val();
if($('#urlContainer #results').length != 0){
$('#urlContainer #results').fadeOut(1000, function() {
$('#urlContainer').load(location.href+' #urlContainer>*',p,function(){
$('#urlContainer #results').hide();
$('#urlContainer #results').fadeIn(1000);
});
});
} else {
$('#urlContainer').load(location.href+' #urlContainer>*',p,function(){
$('#urlContainer #results').hide();
$('#urlContainer #results').fadeIn(1000);
});
}
return false;
});
有任何想法吗?
提前致谢。
$('#urlContainer').load(...)
此代码替换#urlContainer
所有内容。 所有元素都将被替换,这意味着绑定到它们的所有事件处理程序也将被替换。 您应该使用delegate()
在尚不存在的元素上为事件运行代码:
$('#urlContainer').delegate('form', 'submit', function(){
// the code from your submit handler
});
另外,您可以重写代码以避免抹去form
元素,因此该处理程序将继续存在。
jQuery load
函数用AJAX调用的结果替换匹配元素的内容。 发生这种情况时,将删除(或替换)您要绑定的表单,因此不会触发原始事件处理程序。
如果使用.live('submit' ...)
而不是.submit
,它将解决您的问题:
$('#urlContainer form').live('submit', function(){
...
});
live
方法将附加到与选择器匹配的当前和将来元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.