首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery:成功返回的表单需要重新绑定

jQuery:成功返回的表单需要重新绑定
EN

Stack Overflow用户
提问于 2009-02-15 05:27:02
回答 3查看 4.1K关注 0票数 4

一个简单的问题。我使用的是jQuery.forms.js插件。

我有一个表单,张贴到一个php页面,并返回数据与jSon。

返回的数据是新表单的代码(它取代了用于发布信息的表单)。新表单没有绑定到任何jQuery函数,因为页面加载时它不在附近。

那么,如何让ajax form识别新表单,以便在需要第二次使用该表单时,它也能利用jQuery函数呢?

代码语言:javascript
复制
// 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));
}
?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-15 06:14:00

最简单的解决方案是不使用jQuery的表单插件并手动完成,这真的不是很难:

代码语言:javascript
复制
$(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 forms代码,找到它绑定的位置,并尝试修改它,使其使用live。甚至另一种选择是将连接包含在一个函数中,并在成功函数结束时调用它,如下所示:

代码语言:javascript
复制
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();
});

我不认为它很整洁,但它应该可以工作。

票数 6
EN

Stack Overflow用户

发布于 2009-02-15 05:38:37

在ajax调用之后,您需要重新绑定事件处理程序。我听说在新版本的jquery中有一个叫做live events的新特性,这将使这一切变得不必要。

票数 2
EN

Stack Overflow用户

发布于 2009-02-18 05:47:49

如果出于某种原因,你不得不使用1.3版本之前的jQuery,可以使用"livequery“插件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/550370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档