Używam w mojej aplikacji event.stopPropagation()
. Pojawił się jednak jeden scenariusz, w którym chcę, aby propagacja była kontynuowana tak, jakby wspomniana funkcja nigdy nie była wywoływana. Tak się zastanawiam; Czy istnieje sposób na "wznowienie" propagacji po jej zatrzymaniu? Byłoby strasznie nużące, aby przenieść jedno połączenie do event.stopPropagation
na kilkanaście oddzielnych instrukcji warunkowych.Jak cofnąć event.stopPropagation w jQuery?
Odpowiedz
Po zatrzymaniu propagacji nie można jej wznowić. Jako obejście, co można zrobić, to ustawić zmienną, a potem tylko zatrzymać, gdy zmienna ta jest prawdziwa:
var stop = false;
// do your logic here
if(stop){
event.stopPropagation();
}
Zadzwoń pod numer event.stopPropagation()
w swoim stanie. Na przykład:
$el.click(function(event) {
if (some_condition) {
event.stopPropagation()
// do stuff
}
else {
// do other stuff, without stopping propagation
}
});
Żmudne może być, ale niestety stopPropagation jest przełącznikiem w jedną stronę. Po zatrzymaniu nie można go włączyć z powrotem na to samo wydarzenie.
To nie jest warunek "a". To ** wiele ** warunków. Cytując się: "Byłoby strasznie nużącym przenieść jedno wezwanie do event.stopPropagation na kilkanaście oddzielnych instrukcji warunkowych" – Hubro
Może to być nudne, ale niestety 'stopPropagation' jest przełącznikiem w jedną stronę. Po zatrzymaniu nie można go włączyć z powrotem na to samo wydarzenie. –
Teraz ** to ** jest odpowiedzią, której szukałem. Ponieważ to faktycznie odpowiada na moje pytanie, zaakceptuję je, jeśli edytujesz – Hubro
Wystarczy byłaby oryginalne zdarzenie tak:
var refEvent = event.originalEvent;
refEvent.cancelBubble = false;
refEvent.defaultPrevented = false;
refEvent.returnValue = true;
refEvent.timeStamp = (new Date()).getTime();
if (event.target.dispatchEvent){
event.target.dispatchEvent(refEvent);
} else if (event.target.fireEvent) {
event.target.fireEvent(refEvent);
}
Czy możesz podać przykład działania zdarzenia zatrzymanego za pomocą metody e.stopPropagation(), a następnie ponownie uruchomić z powyższym przykładem? Nie mogłem go uruchomić, ale wygląda na to w teorii. – gfullam
Oto rozwiązanie działa:
$('#mydiv').on('click.new', function(e){
e.stopImmediatePropagation();
alert('this will happen only once');
$('#mydiv').unbind('click.new');
});
Wykorzystuje fakt, że zdarzenie może mieć niestandardową przestrzeń nazw i może się odpowiednio odwinąć. Działa również dla e.stopPropagation
. W tym przypadku może cofnąć wszystko związane z tym zdarzeniem kliknięcia niestandardowego.
- 1. JQuery event.stopPropagation() nie działa
- 2. event.preventDefault vs event.stopPropagation
- 3. Jak cofnąć "Rozwiązania" w TortoiseGit?
- 4. Jak cofnąć System.loadLibrary w Javie
- 5. Jak cofnąć "surroundContents" w javascript?
- 6. Jak cofnąć Cofnij w mercurial
- 7. Jak cofnąć deklarację `declaration`?
- 8. Jak cofnąć aktualizację RequestFactory
- 9. Jak cofnąć wyczyść git
- 10. Jak cofnąć "hg qnew"?
- 11. Jak cofnąć hg init?
- 12. Jak cofnąć usunięcie svn
- 13. Jak cofnąć "kopię svn"
- 14. jak cofnąć zapytanie mysql?
- 15. Jak cofnąć zatwierdzenie
- 16. Jak cofnąć aktualizację git-index?
- 17. Jak cofnąć squash git merge?
- 18. Jak skutecznie cofnąć autouzupełnianie w vim
- 19. Jak cofnąć do ostatniego zapisu w vim?
- 20. Jak cofnąć (Ctrl + Z) w VI/vim
- 21. Jak cofnąć git init w katalogu domowym?
- 22. Jak cofnąć ostatnie zatwierdzenie w git
- 23. Jak cofnąć porządkowanie setkey w data.table?
- 24. Jak mogę cofnąć zatwierdzenie SVN?
- 25. Ruby/byebug/binding.pry: Jak cofnąć?
- 26. git cofnąć usunięte pliki
- 27. LINQ - czy można cofnąć?
- 28. Jak cofnąć "Odrzuć", jeśli nie został popełniony
- 29. Jak cofnąć usunięcie gałęzi na githubie?
- 30. Jak cofnąć "Pobierz najnowszą wersję" na TFS
Mmmm ... http: //stackoverflow.com/questions/4735006/javascript-how-to-enable-stoppropagation – elclanrs
Gdyby nie było takiego obiektu, nie będzie trzeba tuzina instrukcje warunkowe, aby zdecydować, czy powinien przywołać to? – Jon
Oni już tam są. Byłoby jedno wołanie do 'event.stopPropagation()' i (rzadko) jedno wywołanie do hipotetycznego 'event.resumePropagation()'. Byłoby to lepsze niż wywołanie 'event.stopPropagation()' we wszystkich warunkowych poza jednym – Hubro