jQuery - podwójne wykonywanie eventu

0

Witam,

W swojej aplikacji (Zend) mam buttona, którego kliknięcie obsługuje poprzez jQuery: $('.submit').click(function() {...});
Dlaczego zdarzenie click wywołuje się dwa razy? Szukając w sieci natrafiłem na event.stopPropagation(); ale dodanie tej funkcji nie przyniosło efektu. Co proponujecie w tej sytuacji?

0

Musiałbyś podać kod, bo przyczyny takiego zachowania mogą być różne, a sypanie teraz kolejnymi funkcjami jak evt.preventDefault() czy evt.stopImmediatePropagation() byłoby jak programowanie przypadkowe. W stylu stada małp piszącego na oślep. Któreś rozwiązanie w końcu zadziała i problem wyląduje na półce, a przyczyny nie zostaną poznane ;).

Podaj sam wygenerowany HTML+JavaScript, nieważne co się dzieje na serwerze.

0
bswierczynski napisał(a)

Musiałbyś podać kod, bo przyczyny takiego zachowania mogą być różne, a sypanie teraz kolejnymi funkcjami jak evt.preventDefault() czy evt.stopImmediatePropagation() byłoby jak programowanie przypadkowe. W stylu stada małp piszącego na oślep. Któreś rozwiązanie w końcu zadziała i problem wyląduje na półce, a przyczyny nie zostaną poznane ;).

Podaj sam wygenerowany HTML+JavaScript, nieważne co się dzieje na serwerze.

Dziękuje za odzew - oto HTML:

 
  <div class="addProductText">
  <form class="addProductForm" name="addProductForm" method="post" action="">
    <label for="categorySelect">Wybierz kategorie: </label><br />
   <select class="category1" name="categorySelect" size="6">
		<option value="1">Muzyka</option>
		<option value="2">Filmy</option>
		   </select>
   <select class="category2" size="6">

   </select>
   <select class="category3" size="6">
   	
   	
   </select>
    <br /><br />
    <label for="authorForm">Autor: </label>
    <input type="text" name="authorForm" size="15" class="authorForm" />lub kliknij: <a href="#">jestem autorem</a> <br />
    <label for="linkInput">Adres URL do zasobu: </label>
    <input type="text" name="linkInput" class="linkInput" size="45" />lub <a href="#" class="upload">załaduj na serwer</a>
  </form>
  </div>

A to JavaScript:

 
$(document).ready(function() {
    $('.category1').click(function(){
  	alert("Select1 click");
   });

}); 

W tym kodzie akurat problem dotyczy kliknięcia w dowolną pozycję w Select, jednak ten sam problem występuję przy kliknięciu w jakikolwiek inny element HTML. Próbowałem zastosować te dwie funkcje podane przez Ciebie (jako pierwsza instrukcja w click) jednak bez efektu.

0

Kod, który podałeś nie generuje błędu, który zgłaszałeś w pierwszym poście. Sam sprawdź. Po kliknięciu na jakąś opcję w selekcie, alert wyświetlany jest raz.

Sugeruje to, że błąd jest gdzieś indziej, np. dołączasz ten skrypt z .ready() dwukrotnie.

0
bs napisał(a)

Kod, który podałeś nie generuje błędu, który zgłaszałeś w pierwszym poście. Sam sprawdź. Po kliknięciu na jakąś opcję w selekcie, alert wyświetlany jest raz.

Sugeruje to, że błąd jest gdzieś indziej, np. dołączasz ten skrypt z .ready() dwukrotnie.

Może problem w jakiś sposób powoduje Zend Framework ? używam layout-u, w którym za pomocą $this->headScript()->prependFile($this->baseUrl().'/js/index.js'); dołączam JavaScript i nic poza tym.

0

To może tak: dla testu, wywal z layoutu wszystko co się da oprócz kodu, który będzie replikował ten błąd. Usuń wszystko, co niepotrzebne z pliku index.js etc. Odpal stronę, upewnij się, że błąd wciąż występuje i wklej tutaj cały kod HTML, jaki zostanie wygenerowany (wraz z DOCTYPEM itp.). Następnie, niżej wklej zawartość pliku index.js czy innych skryptów, jakie dołączasz do tego HTML-a (jQuery nie wklejaj ;), a innych do większych bibliotek po prostu daj link).

W ten sposób sprawimy, że to, co dzieje się po stronie Zend Frameworka nie będzie praktycznie miało znaczenia.

0

Problem rozwiązany - okazało się, że Zend dwa razy dołączał w sekcji HEAD skrypt JS. Przeglądałem tysiąc razy kod i nie znalazłem przyczyny, dla której miałby to robić. w SPACJA końcu się poddałem i podziękowałem Zendowi w tej kwestii - dołączyłem *.js klasycznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1