一个简单的问题。我正在使用jQuery.forms.js插件。
我有一个表单发布到php页面并使用jSon返回数据。
返回的数据是新表单的代码(它替换了用于发布信息的表单)。新表单没有绑定到任何jQuery函数,因为它在页面加载时不存在。
那么,我怎样才能获得ajax表单来识别新表单,这样如果我需要第二次使用表单,它还使用jQuery函数?
// jQuery for submitting info to php doc and, on success, replacing the form
$(document).ready(function() {
jQuery('form[id*=postOnline]').ajaxForm({
dataType: 'json',
success: function(data) {
$('#onlineStatus' + data.rid).html(data.formed).slideDown('slow');
bindNote();
}
});
});
<!-- /////////////////////// POST ONLINE /////////////////////// -->
<div id='onlineStatus<?php echo $b_id ?>' class='postOnline'>
<form name="postOnline" id="postOnline<?php echo $b_id ?>" action="postOnline.php" method="post">
<input type="hidden" value="<?php echo $b_id ?>" name="b" />
<input type="hidden" value="1" name="p" />
<input type="submit" class="button" value="Post Online" />
</form>
</div>
<!-- /////////////////////// POST ONLINE /////////////////////// -->
// ... code for entering data into database and then...
$result = mysql_query( $sql );
if($result) {
if($show == '1'){$val = 'remove from online'; $num='0';}
if($show == '0'){$val = 'show online'; $num='1';}
$return = "
<form name='postOnline' id='postOnline$id' action='postOnline.php' method='post'>
<input type='hidden' value='$b_id' name='b' />
<input type='hidden' value='$num' name='p' />
<input type='submit' class='button' value='$val' />
</form>
";
print json_encode(array("rid" => $id, "formed" => $return));
}
?>
答案 0 :(得分:6)
最简单的解决方案是不使用jQuery的表单插件并手动执行,这真的不是很难:
$(document).ready(function() {
jQuery('form[id*=postOnline]').live('submit', function() {
var formdata = $(this).serialize();
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
dataType: 'json',
data: formdata,
success: function(data) {
$('#onlineStatus' + data.rid).html(data.formed).slideDown('slow');
bindNote();
}
});
return false;
});
});
现在,由于您使用的是jQuery的新(1.3)live
功能,因此您添加的与form[id*=postOnline]
选择器匹配的任何表单仍将与此事件相关联。
或者,您可以打开jquery表单代码并查找其绑定的任何位置,并尝试对其进行修改,以便它使用它live
。甚至另一种选择是包含函数中的接线,并在成功函数结束时调用它,如下所示:
function bindForm() {
jQuery('form[id*=postOnline]').ajaxForm({
dataType: 'json',
success: function(data) {
$('#onlineStatus' + data.rid).html(data.formed).slideDown('slow');
bindNote();
bindForm();
}
});
}
$(document).ready(function() {
bindForm();
});
我认为它不是很整洁,但它应该有用。
答案 1 :(得分:2)
您需要在ajax调用后重新绑定事件处理程序。我听说jquery的新版本中有一个名为live events的新功能,但这会使这不必要。
答案 2 :(得分:0)
如果出于某种原因你仍然坚持使用1.3之前版本的jQuery,请使用“livequery”插件。