2010-08-03 39 views
15

Bir olayın yalnızca bir kez ateşlenmesini nasıl kontrol ederim?Sadece bir etkinliği bir kez mi ateşlediniz?

Aslında hızlı bir google jQuery en one method, bir olayın sadece ilk geçtiği abone hangi kullanabilirsiniz .. .one yardımcı olduğu gerçeği

+2

Temsilim 3000'in üzerine çıktığı anda c'ye gidiyorum 'allah' için 'allah' ' –

+0

Oh, bu kesinlikle utanç verici oldu. Bunun için teşekkürler. – Qcom

+0

Yorum yazdı dikkatimi çekti –

cevap

14

ima görünmektedir.

$('something').one('click', function(e) { 
    alert('You will only see this once.'); 
}); 
+0

Tamam, harika, sadece merak ediyorum, parantezler arasında 'e' nedir? Ayrıca, bu işlev iki parametre gerektirir mi? 1 sadece bir kez çalıştırmak istediğiniz ve diğeri işlev için? – Qcom

+1

'e', geri arama için olay resmi parametresidir. Bu durumda kullanılmaz. İki parametre olay tipi ve işlevidir. –

+0

Harika! Bu gerçekten yararlı, bu ve .bind arasındaki fark nedir? .unbind gibi bir şey tarafından bağlanmamış olması gerekmiyor mu? – Qcom

20

vanilya js

function addEventListenerOnce(target, type, listener) { 
    target.addEventListener(type, function fn(event) { 
     target.removeEventListener(type, fn); 
     listener(event); 
    }); 
} 

addEventListenerOnce(document.getElementById("myelement"), "click", function (event) { 
    alert("You'll only see this once!"); 
}); 

http://www.sitepoint.com/create-one-time-events-javascript/

Düzenleme: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

Düzenleme 2016/11/23 morina versiyonu ve terminoloji esinlenerek modifikasyon:

Örneğin

once tarayıcılara geliyor. Şu anda Chrome 55, Firefox 50 Safari'de 10,1

Ve bu gibi kullanmak: rofrol cevabı şeklinde

document.addEventListener(
    'DOMContentLoaded', 
    improveAllTheThings, 
    {once: true} 
); 

https://www.webreflection.co.uk/blog/2016/04/17/new-dom4-standards

3

aynı , sadece başka bir form:

function addEventListenerOnce(element, event, fn) { 
     var func = function() { 
      element.removeEventListener(event, func); 
      fn(); 
     }; 
     element.addEventListener(event, func); 
    } 
0

Ayrıca, bunu yapabilirsiniz:/add

window.addEventListener("click", function handleClick(e) { 
    window.removeEventListener("click", handleClick); 

    // ... 
}); 
0

Eklendi seçenekleri kaldırmak olay dinleyicisi:

function addEventListenerOnce(target, type, listener, optionsOrUseCaptureForAdd, optionsOrUseCaptureForRemove) { 
    const f = event => { 
     target.removeEventListener(type, f, optionsOrUseCaptureForRemove); 
     listener(event); 
    } 
    target.addEventListener(type, f, optionsOrUseCaptureForAdd); 
} 
2

Sadece addEventListener yöntem çağrısında uygun seçeneği kullanın:

element.addEventListener(event, func, { once: true }) 
+0

IE tarafından desteklenmiyor. –