没有刷新,AJAX不能“捕获”事件

时间:2009-07-31 15:39:43

标签: jquery ajax

我对此很陌生,所以请耐心等待......

假设我有这个javascript代码

$(document).ready(function() {
    $("a").click(function() {
        alert("Hello world!");
    });
});

我理解它的方式,此代码将“捕获”任何链接选择并发布警告框。通常情况下这很好。

现在,在同一页面上我还有一个表,在提交时,我正在捕获表单提交并使用JQuery将数据添加到用户显示,同时将数据发送到服务器。

以下是截取帖子请求的代码(主要来自Railscasts #136

jQuery.ajaxSetup({
    'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "text/javascript")
    }
})

jQuery.fn.submitWithAjax = function() {
    this.submit(function() {
        $.post(this.action, $(this).serialize(), null, "script");
        return false;
    })
    return this;
};

$(document).ready(function() {
    $("#new_ride_form").submitWithAjax();
})

以下是渲染部分内容的代码......

$("#add_new_ride").before("<%= escape_javascript(render(:partial => @ride)) %>");
$("#ride_<%=@ride.id %>").effect("highlight", {color: '#aaffaa'}, 2000);
$("#new_ride_form")[0].reset();

这是在部分

生成的一个表格单元格中创建链接的代码
<td><%= link_to  'remove', ride_url(ride),
   :id => :destroy_ride,
   :method => :delete,
   :href => delete_ride_url(ride) %>
</td>

现在,当我提交表单,然后单击新创建的表行中的“删除”链接时,它只是提交删除请求。用于创建“Hello World”警告框的javascript不会被执行。

但是,如果我提交表单,创建新表格行,然后手动刷新页面,然后点击新创建的表格行中的“删除”链接,即“Hello World”警告框按预期显示。

这里发生了什么,我需要在获得预期行为之前手动刷新?

是否有一个“document.ready”事件或者我需要在使用AJAX添加表格行之后触发,以告诉代码“嘿,这里有一些新东西你需要注意”。< / p>

谢谢!

顺便说一句,我在Rails和JQuery中编码,但我不确定它是否重要。

1 个答案:

答案 0 :(得分:4)

听起来您想使用jQuery.live代替jQuery.click。区别在于jQuery.click将绑定所有当前 <a>元素的click事件,jQuery.live将绑定所有当前和未来 elements。

$(document).ready(function() {
    $("a").live("click", function() {
        alert("Hello world!");
    });
});