Ajax achor在完成ajax请求后变为普通锚点!

时间:2011-05-08 21:43:07

标签: jquery ajax

我正在使用以下Ajax函数发送请求。虽然发生了一些奇怪的事情。请求完成后,返回的新按钮不会启用ajax。它充当了正常的锚点。

$(document).ready(function() {
    $(".UIButton a").click(function(e) {
        e.preventDefault();

        if (! $(this).data("isClicked"))
        {
            var requestData = $(this).attr("href");
            var link = $(this);

            $.ajax({
                context: this,
                dataType: 'js',
                url: requestData,

                beforeSend: function() {
                    $(link).fadeOut("slow");
                },

                error: function() {
                },

                success: function(response) {
                    $(link).parent().html(response);
                       $(link).stop().fadeIn("slow");
                }
            });

            // Toggle isClicked to prevent button mashing
            link.data("isClicked", true);

            // Create timeout to restore button
            setTimeout(function() { link.removeData("isClicked") }, 1000);
        }
    });
});

这是从服务器返回的内容,这是正确的: <a class="delete" href="/users/delete/3333">Delete</a>

这是原始按钮:

<div class="UIButton">
   <a class="Add" href="/users/add/3333">Add</a>
</div>

2 个答案:

答案 0 :(得分:2)

由于最初将事件侦听器绑定到click事件时链接不存在,因此需要重新绑定事件(在成功函数中使用bind),或使用{{ 1}}或live将事件处理程序绑定到事件(推荐)。

使用delegatedelegate可确保现在和将来在匹配的元素上处理事件。

以下是使用delegate完成此操作的方法:

live

(这是推荐的方法)

$("containing-element-selector").delegate(".UIButton a", "click", function() { ... });

live

答案 1 :(得分:1)

这是因为.click()函数只影响当前存在的DOM元素。请尝试使用.live("click", function() {your_function_here})

有关详细信息,请参阅http://api.jquery.com/live/