2012-05-25 1 views
0

У меня есть этот кусок JS:preventDefault не работает с jQuery.live

$('.self_delete').live('click', function(e){ 
    e.preventDefault(); 
    $.ajax({ 
     type: 'DELETE', 
     url: $(this).attr('href'), 
     success: $(this).parent().remove(), 
     dataType: "script" 
    }) 
}); 

которые нацелены на этот HTML:

<a href="/list_items/34" class="self_delete" data-method="delete" rel="nofollow"> 
    <i class="icon-trash"></i> 
</a> 

Проблема заключается в том, что, когда я нажимаю на ссылку, он будет сначала отправьте вызов ajax на сервер. THEN отправляет обычный вызов HTML. Конечно, этот беспорядок происходит после того, как list_item уже удален.

У меня такое чувство, вызванное вызовом live(), но я не могу понять, почему. Мой JS-Fu нуждается в обучении!


EDIT изменил код так:

$('.self_delete').live('click', function(e){ 
    e.preventDefault(); 
    var self = $(this); 
    $.ajax({ 
     type: 'DELETE', 
     url: self.attr('href'), 
     success: function(){ self.parent().remove() }, 
     dataType: "script" 
    }) 
}); 

И я до сих пор тот же вопрос. Пытался заменить .live на .on, но он даже не пытался отправить через AJAX, поэтому я думаю, что мне придется более внимательно прочитать документ: -S

+0

Вы можете использовать bind вместо live? – fcalderan

+0

Фактически '.live()' устарел в пользу '.on()' –

+2

@ F.Calderan как 'bind', так и' live' устарели от 1.4, используют 'on' для 1.7 или выше или' делегировать 'для иначе :) – mattytommo

ответ

4

Вам необходимо обернуть свой код успеха анонимной функцией, на данный момент он будет работать сразу, а также хранить ссылку на $(this) в другой переменной, например self

$('.self_delete').live('click', function(e){ 
e.preventDefault(); 
var self = $(this); 
$.ajax({ 
    type: 'DELETE', 
    url: self.attr('href'), 
    success: function(){ self.parent().remove() }, 
}) 
}); 

на стороне записки, вы должны использовать .on от JQuery 1.7 .live устарела.

$(document).on('click', '.self_delete', function(e){ 
    e.preventDefault(); 
    var self = $(this); 
    $.ajax({ 
     type: 'DELETE', 
     url: self.attr('href'), 
     success: function(){ self.parent().remove() }, 
    }) 
}); 
+0

+1 для определения этого, но как это может помешать дополнительной отправке? –

+0

смотреть выше, проблема все еще есть. – Alain

+0

Что означает ** ТОГДА он посылает обычный вызов HTML **. Наверное, я действительно не понимаю, в чем проблема, что у вас есть, чего вы ожидаете от этого? В этом случае он отправит запрос ajax, и при успешном выполнении он удалит родительский элемент. –