jQuery ajaxStart和ajaxComplete live是什么?

4

我已经做到以下工作:

$(".new_comment").ajaxStart(function() {
    ajaxBanner('show');
    // Disable button
    $("input[type=submit]", this).attr("disabled", true);
});
$(".new_comment").ajaxComplete(function() {
    ajaxBanner('hide');
    // Re-enable button
    $("input[type=submit]", this).removeAttr("disabled");
});

问题在于只有页面渲染带有评论表单时才能工作。在许多情况下,评论表单是动态注入到页面上的,因此这种方法会失败。

如何使上述代码实现live()?

谢谢


在执行任何逻辑之前,你可以检查一下是否存在“commentform”。 - kobe
明白了,当您动态插入时出现问题,那么实时应该可以工作。 - kobe
2个回答

1

这个没有经过测试,但或许值得一试?

$(".new_comment").live("ajaxComplete", function() {
    ajaxBanner('show');
    // Disable button
    $("input[type=submit]", this).attr("disabled", true);
});

另一种方法是在动态注入评论表单时添加事件,但我们需要更多的代码(即注入发生的位置)来实现这一点。

ya AJAX 仍然运行良好。我应该补充说明,页面上有多个评论表单,有时会注入新的表单.. 这是表单标签的样子:<form accept-charset="UTF-8" action="/conversations/65/comments" class="new_comment" data-remote="true" id="new_comment" method="post"> - AnApprentice
好的,我成功地让它工作了,通过将ajaxComplete的内容包装在一个表单内:$(".new_comment").live("submit",function(){ - AnApprentice

0

我不确定当绑定到 jQuery 集合时,.ajaxComplete() 函数是如何工作的,但我猜你可以通过绑定到一个已知存在的元素,比如 document,然后使用普通的选择器来轻松解决你的问题:

$(document).ajaxStart(function() {
    ajaxBanner('show');
    // Disable button
    $(".new_comment input[type=submit]").attr("disabled", true);
}).ajaxComplete(function() {
    ajaxBanner('hide');
    // Re-enable button
    $(".new_comment input[type=submit]").removeAttr("disabled");
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接