【问题标题】:jQuery re-bind .submit() after AJAX calljQuery 在 AJAX 调用后重新绑定 .submit()
【发布时间】:2011-05-05 22:17:33
【问题描述】:

我正在创建一个论坛风格的系统,在该系统中创建帖子,然后用户可以在原始帖子上发布 cmets。 (我所做的实际上在上下文中非常不同,但主题是相同的)。

添加评论的表单是 Post 的一部分,使用 jQuery $.get() 拉入。

这是当前的提交处理程序:

$('#add-stage-form').submit(function(){

        var data = $('#add-stage-form').serialize();
        add_stage(data);
        return false;   
    });

好的.. 现在,一旦它被拉入,我需要重新绑定它,同样可以使用live()

如果有人建议live('submit', function(){ ... }),我尖叫,因为提交不像点击!

我也很清楚,您可以在同一个按钮上绑定“点击”事件 - 如果可能的话,我会很多而不是绑定 .submit() 事件

提前致谢! :)

【问题讨论】:

  • 所以您在提交后将按钮重新注入到 DOM 中?
  • 是的。我 [使用 .get()] 拉入了大量帖子,每个帖子都有一个评论框和提交按钮。

标签: jquery ajax get submit bind


【解决方案1】:

可以在get方法的onComplete回调中手动添加绑定...

$.get('getposts.html', function(data) {
    var myForm = $(data);
    $('.formContainer').append(myForm);

    $('.add-stage-form', myForm).submit(function(){

        var data = $(this).serialize();
        add_stage(data);
        return false;   
    });

});

*编辑 将 add-stage-form 更改为类而不是 id。您提到每个帖子都会有一个表格?

【讨论】:

  • 你是对的.. 实际上,如果不使用丑陋的 .find() 函数,就无法序列化正确的(可能有很多)表单,这可能会导致整个事情失败。
  • 你应该没问题。您可以使用 $(this) 来获取正在提交的表单。更新答案
  • 我已经完成了一半 - 谢谢!一旦它完全工作,将标记为“正确答案”! :)
  • 大哥,你是明星*
  • 酷,如果您有任何其他问题,请告诉我:)
【解决方案2】:

您是否尝试过使用Live()? :)

但是说真的,如果您将点击事件附加到按钮然后调用jQuery.Post() 操作,这可能不是一个坏主意。甚至是提交页面的 javascript 方法。

我知道这不是(最好的)解决方案,但它可能会让你越界。

如果有更好的答案,我会收回这个答案。

【讨论】:

  • 不,你是对的 - 我可能应该这样做,我希望喜欢找到一种绑定 .submit 的方法,但它真的很有用 -尤其是如果我想使用 jQuery validate 等。喜剧赞赏 ;) (在继续阅读之前,我几乎精神崩溃了。)
  • 我正在 jsfiddle 上对此进行测试,但无法使其正常工作。然后 jsfiddle 跳了出来,我的测试代码不见了 sigh
  • 我完全赞同时不时地去精神。我实际上非常喜欢只有一个按钮然后在代码中提交的想法。我想我可以在提交之前做一些事情,验证。
  • @Alex coady,你试过@Dean North 的回答吗?
  • 我有,它仍然没有绑定(点击提交刷新页面,所以return false 肯定没有激活..)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多