我有一个用于更改某些列表中对象位置的脚本。当更改输入值时,将对数据库中的函数更改位置进行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;
});
和我的示例页面:
答案 0 :(得分:0)
将事件绑定/委托给不会刷新或删除的包含元素。例如:
$('#objects-list').delegate('.object-position', 'change', function() {
... code ...
});
委托如何工作 - 单个事件绑定到'#objects-list'但是针对'.object-position'类型的任何事件目标触发。此外,它是jQuery中唯一的函数,其中'this'不是指$(...)中包含的内容。
更多关于event delegation。