从兄弟对象多次运行相同的ajax事件

时间:2010-11-01 12:41:03

标签: jquery ajax javascript-events

我有一个用于更改某些列表中对象位置的脚本。当更改输入值时,将对数据库中的函数更改位置进行ajax调用,并返回更新的列表。但如果我想再次更新我的列表,我需要刷新页面。如何将事件重新附加到元素?

js:

$(".object-position").livequery("change", function() {
    $("#objects-list input").attr('disabled', true);
    var action = $(this).attr('name');
    var position = $(this).attr('value');
    var id = $(this).attr("id");
    var model = id.split("-")[0];
    var object_id = id.split("-")[1];

    $("#loader").show();
    $("#loader").fadeIn(200);

    $.ajax({
        type: "POST",
        url: "/manage/update_position/",
        data: "action=" + action + "&model=" + model + "&object_id=" + object_id + "&position=" + position,
        dataType: "json",
        success: function(data){
            $("#loader").fadeOut("fast", function () {
                $("#loader").hide();
            });
            $("#objects-list").html(data["html"]);
            $("#message").show();
            $("#message").fadeIn(400).html('<span>'+data["message"]+'</span>');
            setTimeout(function(){
                $("#message").fadeOut("slow", function () {
                    $("#message").hide();
                });
            }, 1500); 
        }
    });
    $("#objects-list input").attr("disabled", false);
    return false;
});

和我的示例页面:

LINK

1 个答案:

答案 0 :(得分:0)

将事件绑定/委托给不会刷新或删除的包含元素。例如:

$('#objects-list').delegate('.object-position', 'change', function() {
  ... code ...
});

委托如何工作 - 单个事件绑定到'#objects-list'但是针对'.object-position'类型的任何事件目标触发。此外,它是jQuery中唯一的函数,其中'this'不是指$(...)中包含的内容。

更多关于event delegation