2013-03-15 22 views
5

çocuklar!JQuery olayını #id 'i tıkladıktan sonra (veya ikinci tıklamayı engelle)

Gerçekten aşağıda sorunu çözmek için elimden geleni yapıyorum, ama birçok saat sonra ben gitmek için doğru yolu görmek mümkün değilim! Anlatayım:

  • Bir eleman a-href (#opener) o tıklandığında, bir div (#target) içindeki ajax ile bir URL yükleyen bir jQueryUI kalıcı iletişim ateşler var.
  • Her şey mükemmel çalışıyor, ancak bunun bir kez olmasını istiyorum!
  • ancak çalışmıyor, benim #opener bir-href (.deactivated) bir sınıf ayarlamak ve tekrar ateş etmek için harekete önlemek için id (#opener) kaldırmak başardı kalıcı pencere yükledikten sonra. .. a-href tıklanabilir kalır ve modal pencereyi (#target) üzerine tıkladıktan sonra defalarca açılır!
  • buldum tek çözüm $ (this) .fadeOut() kullanarak --- DOM tamamen-href kaldırmak oldu
  • ; --- ama gerçekten çirkin, çünkü link #opener sadece ince havada kayboluyor.

Herhangi bir fikir? Çok teşekkürler. G.

<script> 
$(document).ready(function() { 
    $('#opener').click (function() { 

     $('#target').load ('http://my.url', function(){ 
      $('#target').dialog({ 
       title: 'My Title', 
       draggable: true, 
       dialogClass:'My Class', 
       modal: true, 
       hide: { effect: 'fade', speed: 'fast' }, 
       show: { effect: 'fade', speed: 'fast' }, 
       closeOnEscape: true, 
       closeText: 'Close', 
       beforeClose: function(event, ui) { 
        'window.location.reload(true)' 
       }, 
      });//end dialog 
     }); 
     $(this).addClass('.deactivated'); 
     $(this).removeAttr('id'); 
    }); 
}); 

+0

kural: olası yeniden kullanım için kaydet - 'on/off' kullan; SADECE bir kez kullanın ve bir daha asla - bir fonksiyonunu kullanın –

cevap

8

.

sonra otomatik olarak ilk kez yanana sonra işleyicisi keser .one (yerine .on veya eskimiş .bind ait) kullanılarak tıklama olayı

Ya bağlama:

$('#opener').one('click', ...) 

Ya tıklama işleyicisi içinde olayı devre dışı bırakın:

$('#opener').on('click', function() { 
    ... 
    $(this).off('click').addClass('.deactivated'); 
}); 

Not: iyi, her zaman yeni .on (veya .one) ve .off fonksiyonlarını kullanmak için pratik yerinebulunuyorveya .click, vb olay işleme kodu daha tutarlı hale getirir ve .click hem kayıt (parametre olmadan) bir olay işleyicisi veya tetik olay işleyicileri için nasıl kullanılabileceği ile karışıklığı önler.

$('#opener').one('click', function(event) { 
    // your code here 
}); 
+0

Sevgili Alnitak! Bu kadar detaylı yardım için çok teşekkür ederim. Problem burada çözüldü! PHP ile çalışıyorum ve jQuery'yi başlatıyorum ve yardımlarınız çok eğiticiydi. Saygılarımla! – Cospefogo

+0

İstenirse –

+0

merhaba dır, ancak tekrar düğmeyi yeniden etkinleştirmek için 'one' içinde devre dışı bırakılmış olarak ayarlayabilirsiniz. örneğin tekrar tıkladığınızda başka bir eleman #opener etkinleştirilecek mi? –

4

Açıklama

.one(), elemanları için bir olay için bir işleyici takın. İşleyici, eleman başına en fazla bir kere çalıştırılan 'dur. (Eğer "Olay heyeti" kullanmıştı sürece) bu unsura bağlı herhangi işleyicileri kaldırmaz eleman kimlikle Çıkarma

$('#opener').one('click',function(){ 
    //your code 
    }); 
+0

Çok teşekkür ederim! Kendime çok açık bir cevap bulamadığım için kendimi utanıyorum ... – Cospefogo

2

Sen kendini kaldırmak sonra sadece tek bir defa ateş edeceği bir olay işleyicisi kurmak için .one() işlevini kullanabilirsiniz ve

$('#opener').one("click", function() { 

}); 

http://api.jquery.com/one/

+0

Teşekkürler teşekkürler! Çok açık ... Vay canına. – Cospefogo

2

kullanın one:

+0

Herkese teşekkürler! – Cospefogo

İlgili konular