2011-01-30 12 views
18

Kızgınlaşıyorum - belki birileri bana bu konuda yardımcı olabilir.jQuery ciltleme AJAX araması yapıldıktan sonra bir bağlantıya tıklayın

Tıklayın AJAX çağrısı sonra bağlantıyı tıklatmanız gerekir, ancak bazı nedenlerle çalışmak istemiyor.

if ($('.active').length > 0) { 
    $('.active').click(function() { 
     var elem = $(this); 
     var url = $(this).attr('href'); 
     $.ajax({ 
      url: url, 
      dataType: 'html', 
      success: function(data) { 
       elem.replaceWith(data);              
      }  
     });   
     $('.active').bind('click'); return false;   
    }); 
} 

herhangi bir fikir:

İşte benim kod? yanıtlar için

teşekkürler - kanununda değişiklik yaparak, ama sorun hala orada:

function makeActive() { 
    if ($('.active').length > 0) { 
     $('.active').click(function() { 
      var elem = $(this); 
      var url = $(this).attr('href'); 
      $.ajax({ 
       url: url, 
       dataType: 'html', 
       success: function(data) { 
        elem.replaceWith(data);        
       }  
      }); 
      $('.active').live('click', makeActive);  
      return false;   
     }); 
    } 
} 


$('.active').live('click', makeActive); 
+1

Lütfen güncelleştirmenizle ilgili güncellemeye bakın. –

cevap

19

Eğer sonra bunu Ajax arama yürütmek istiyorsanız success işleyicisindeki yeniden birleştirme eklemek gerekir: bahsedilen

success: function(data) { 
    elem.replaceWith(data); 
    $('.active').bind('click', /* some function needs to go here*/); 
} 

bu durumda, live() veya delegate() muhtemelen, Daha iyi seçenekler [Güncelleme: şimdi jQuery 1.7 çıktı, her şey .on()] ile yapılabilir. Bu, değiştirilmemiş olan diğer .active bağlantılarınızın olması durumunda, tıklama işleyicilerinin çift atamasını da önler.

Güncelleme: Güncellenmiş kodunuzla ilgili olarak: live kullanmanın yolu, amacını yener. Lütfen documentation numarasını okuyun. Yaptığınız şey, bağlantı tıklandığında tıklama işleyiciyi atamaktır. Bu, tıklama işleyicilerini tekrar tekrar eklediğiniz anlamına gelir.

Bu, kodunuzun geliştirilmiş bir sürümüdür.

$('.active').live('click', function(event) { 
    var elem = $(this); 
    var url = $(this).attr('href'); 
    $.ajax({ 
     url: url, 
     dataType: 'html', 
     success: function(data) { 
       elem.replaceWith(data);        
     }  
    });  
    event.preventDefault(); 
    event.stopPropagation(); 
}); 
+0

Fantastik - Zaman ve çaba için çok teşekkürler! – user398341

+0

@ kullanıcı398341: Rica ederim :) –

+0

Sir felix! seni seviyorum !! –

30

GÜNCELLEME 31 Ekim'de,

2012 jQuery 1.7, tavsiye edilen yaklaşımından başlayarak kullanmaktır on -

$(document).on('click', '.active', function() { 
    // click handler code goes here 
}); 

Aşağıdakileri deneyebilir misiniz?

$('.active').live('click', function() 
{ 
    // click handler 
}); 
+0

Teşekkürler, bu bana yardımcı oldu :-). +1! –

+0

Neden '.on()', '.live()' işlevi çalışırken çalışmıyor? – foochow

+1

@SayemAhmed bunu çözdü. '.live (arg, fn)', .on (bind, arg, fn) 'tarafından yerine getirilir. '.on' için isteğe bağlı argüman parametresinin AJAX çağrıları için sınıf veya kimliğin yerleştirildiği gerçeği gözden kaçırmıştım. '.ve'sinden önce yerleştirmek yerine .live'de. Başka bir [post] (http://stackoverflow.com/questions/8752321/jquery-live-vs-on-method-for-adding-a-click-event-after-loading-dynamic-ht), '' olduğunu vurguladı. on 'funciton, bir çocuk çağrısıyla statik bir öğeye bağlı olmalıdır. – foochow

İlgili konular