2012-11-30 9 views
5

Czy możliwe jest wyczyszczenie własności jquery one? na przykład ze względu htmlmożliwe usuwanie jquery `one` method

<div id="button">button</div> 

    <div id="clearOneProperty">clear one property</div> 

i js

$("#button").one("click", function() { 
    alert("blah"); 
}); 

$("#clearOneProperty").on("click", function() { 
    // clear "one" property, that is after this event, I want "#button" to work again 
}); 

Demo http://jsfiddle.net/RzzCu/2/

Tak więc, jeśli kliknięcie #button div, alarm się tylko jeden razy prawda?

I chcę tego, klikając na #clearOneProperty, zresetować jedną właściwość. To jest możliwe?

P.S. Nie pytam, jak zrobić to innymi sposobami, jestem dokładnie interesująca: "możliwa metoda jasnego jquery one?". Dzięki.

+2

Kiedy mówisz „jasny sposób jeden()” masz na myśli, ponownie podłączyć go tak, że '# button' można ponownie kliknąć, czy masz na myśli usunięcie jednego'() 'event, aby nie można było kliknąć? –

+0

'ponownie załączyć, aby ponownie kliknąć przycisk # – RIKI

Odpowiedz

6

Spróbuj tego:

function bindButton() { 
    $("#button").unbind('click').one("click", function() { 
     alert("blah"); 
    }); 
} 

bindButton(); 

$("#clearOneProperty").on("click", function() { 
    bindButton(); 
}); 

Updated fiddle

+0

Tak, to jest odpowiedź, dzięki. – RIKI

+0

Nie ma problemu, z przyjemnością pomogę :) –

0

Zastosowanie unbind() metoda

$("#button").unbind(); 
+2

Zauważ, że OP chce ponownie dołączyć wydarzenie, a nie go rozpinać. –

+0

Myślę, że OP chce coś przeciwnego: powiąż ponownie przycisk po zresetowaniu. –

+0

Dobrym przykładem tego, czego chce OP, jest na przykład wybór znajomego z listy znajomych, dołączenie formularza czatu do niektórych TAB. Gdy klikniesz, aby zamknąć kartę, przypisz jedną funkcję ponownie do listy znajomych, aby można było otworzyć zakładkę ponownie. Jeśli nie używasz go na liście znajomych, wiele wystąpień tego "znajomego" pojawi się na liście TAB. – HenryW

1

Wystarczy ponownie powiązać go wewnątrz funkcji.

$("#button").one("click", function() { 
    alert("blah"); 
}); 

$("#clearOneProperty").one("click", function() { 
    $('#button').one("click", function() { 
    alert("blah"); 
}); 
}); 

tu fiddle

0

Spróbuj

$('#button').unbind('click'); 
+0

Zauważ, że OP chce ponownie dołączyć wydarzenie, a nie go rozpinać. –

+2

downvote jest trochę trudny, nie? Pytanie jest napisane dość niejednoznacznie ... – Elliott

3

one usuwa powiązanie jego własny na pierwszym wywołaniu jak stwierdził „Pierwszą formą tej metody jest identyczny .bind(), except that the handler is unbound after its first invocation" , jQuery Documentation * Musisz ponownie to powiązać. *.

Live Demo

$("#button").one("click", onefunction); 

function onefunction() { 
    alert("blah"); 
} 
$("#clearOneProperty").one("click", function() {  
    $("#button").one("click", onefunction); 
});​ 
+1

To jest naprawdę jedyna czysta odpowiedź! –