Следите за точкой с запятой, убедитесь, что вы заканчиваете каждую команду одной, избавит вас от головной боли позже.
Что касается событий, связанных live()
, их необходимо отменить, вызвав die()
. Он имеет те же параметры, что и unbind()
. Взгляните на документацию .
function ajaxHandler(){
var addassociateID = $(this).attr("id");
var $this = $(this);
$this.die('click');
$.ajax({
type: 'POST',
url: '/data/watchlist_save.asp',
data: {m : 'share_watchlist_add', watchListID : <%=WatchListID%>, a : addassociateID},
async: true,
success: function(data) {
$(".associate_users").load("/data/sub_watch_members.asp?watchListID=<%=WatchListID%>",{cache:false},function(){
$(".search_note").html(data);
$this.bind('click',handler);
});
},
error: function(data){
$(".search_note").html(data);
$this.live('click', ajaxHandler);
}
});
}
$("input[name=add_associate]").live("click", ajaxHandler);
Редактировать: Забыл добавить несколько важных моментов. Вы должны отменить привязку вашего живого события прямо в обработчике кликов и перепривязать его при ошибке, точно так же, как предложено @ stefan .
Также убедитесь, что вы сохранили объект this
в переменной, так как он не указывает на ваш элемент DOM в функции обратного вызова ajax. В качестве альтернативы вы можете использовать свойство context
в вашем запросе ajax, посмотрите документацию .