Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] onclick cały div
Forum PHP.pl > Forum > Przedszkole
sannin
Witam,
w divie dałem sobie zdarzenie onclick, reaguje ono na całym divie. Chiałbym aby tak działało z wyłączenie inputów (jesli na nie klikne nie zadziała onclick), da się tak zrobić ?
AdIoS_Neo
Opisz dokładniej problem bo nie za bardzo rozumiem o co Ci chodzi.
sannin
Chodzi o to że mamy coś takiego:

  1. <div onclick="alert('test');">
  2. <input type="submit" name="aa">
  3. </form>
  4. </div>

W takim układzie jeżeli kliknę na inputa zostanie wyświetlony alert, a mi chodzi o to żeby się nie wyświetlał.
piotrooo89
to dodaj dla inputa onclick...
sannin
Próbowałem tak, wtedy najpierw wykonuje onclick dla inputa, a potem dla diva :/
piotrooo89
to ty jak w końcu chcesz? usuń onclick z diva i będziesz miał tylko dla inputa.
nospor
@piotroo no przeciez napisal wyraźnie:
Cytat
Chiałbym aby tak działało z wyłączenie inputów


@sannin daj dla inputa:
onclick="return false;"

powinno pomoc
pi_wo
Generalnie nie wiem czy da się ograniczyć wywołanie funkcji wybiórczo dla poszczególnych elementów DIV'a. Wydaje mi się, że parametr onclick jest "dziedziczony" przez całą treść, czyli wszystkie obiekty zawarte w tym DIV'ie (nie myl tego przypadkiem z dziedziczeniem w językach programowania). Można to jednak obejść na kilka sposobów. Np fizycznie przykryć inputy wyższymi elementami (css position). Można też wpłynąć na treść samej funkcji i określić jej zachowanie wg wskazanych warunków. Ja wykorzystałem i zmodyfikowałem event-handler znaleziony na necie:

  1. <script type='text/javascript' LANGUAGE="JavaScript">
  2. var ostatni_node_pod_mysza = "";
  3.  
  4. function node_pod_mysza(mEvent)
  5. {
  6. // Internet Explorer
  7. if (mEvent.srcElement)
  8. {
  9. ostatni_node_pod_mysza = mEvent.srcElement.nodeName;
  10. }
  11. // Netscape and Firefox
  12. else if (mEvent.target)
  13. {
  14. ostatni_node_pod_mysza = mEvent.target.nodeName;
  15. }
  16. }
  17.  
  18. function test(){
  19. if(ostatni_node_pod_mysza == "INPUT") alert("To jest INPUT więc nie działam");
  20. else alert("Teraz działam...");
  21. }
  22. <body onMouseDown="node_pod_mysza(event);">
  23. <div onclick="test();">
  24. tresc tresc tresc tresc tresc tresc<br>
  25. <input id="blabla" value="blablabla"><br>
  26. tresc tresc tresc tresc tresc tresc<br>
  27. </div>
  28. </body>
  29. </html>


Pewnie znajdzie się jakieś prostsze rozwiązanie... ale mi nic bardziej eleganckiego nie przychodzi do głowy.
sannin
Cytat(nospor @ 21.04.2009, 10:49:23 ) *
@sannin daj dla inputa:
onclick="return false;"

powinno pomoc

Niestety nie działa sadsmiley02.gif

edit: zadziałało w ten sposób że ten input nie wysyła formy...
nospor
http://www.quirksmode.org/js/introevents.html
Cytat
Finally, you have to decide whether you want the events to bubble up. If you don’t want that to happen, stop the propagation of the event.
function doSomething(e) {
if (!e) var e = window.event
// handle event
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
sannin
Rozumiem że muszę teraz dać warunek w który inputy będą ignorowane ? W jaki sposób to wykryć ?
osl
podsumuj to co koledzy wyżej napisali:
potrzebujesz dodać do inputa zdarzenie onclick, a kod tego zdarzenia powinien się opierać na tym co napisał nospor.
ta funkcja nie musi robić nic więcej, poza właśnie przechwyceniem kliknięcia i nie przekazywania go dalej.
sannin
Wiem, tylko że znamm tylko mierne podstawy JavaScript i nie wiem jak sprawdzić czy kliknięto input
pi_wo
Że tak bezczelnie zaflooduje, sprawdziłeś moje rozwiązanie ? smile.gif

Rozwijając to co napisałem wyżej:

  1. function test(){
  2. if(ostatni_node_pod_mysza != "INPUT"){
  3.  
  4. //Działam tylko gdy ostatni kliknięty objekt nie był inputem
  5.  
  6. //i dalej co tam ta funkcja ma robić
  7.  
  8. }
  9. }
osl
sannin, chyba się zakręciłeś troche winksmiley.jpg

wrzuć
  1. <input type="text" onclick="doSomething(event)" />


i użyj funkcji podesłanej przez nospor
sannin
Dzięki za pomoc smile.gif już działa
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.