Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] onclick cały div
sannin
post
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

Ostrzeżenie: (0%)
-----


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ć ?
Go to the top of the page
+Quote Post
AdIoS_Neo
post
Post #2





Grupa: Zarejestrowani
Postów: 159
Pomógł: 43
Dołączył: 8.03.2009

Ostrzeżenie: (0%)
-----


Opisz dokładniej problem bo nie za bardzo rozumiem o co Ci chodzi.
Go to the top of the page
+Quote Post
sannin
post
Post #3





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

Ostrzeżenie: (0%)
-----


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ł.
Go to the top of the page
+Quote Post
piotrooo89
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




to dodaj dla inputa onclick...


--------------------
Go to the top of the page
+Quote Post
sannin
post
Post #5





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

Ostrzeżenie: (0%)
-----


Próbowałem tak, wtedy najpierw wykonuje onclick dla inputa, a potem dla diva :/
Go to the top of the page
+Quote Post
piotrooo89
post
Post #6


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




to ty jak w końcu chcesz? usuń onclick z diva i będziesz miał tylko dla inputa.


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pi_wo
post
Post #8





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 18.03.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował pi_wo 21.04.2009, 10:01:40
Go to the top of the page
+Quote Post
sannin
post
Post #9





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

Ostrzeżenie: (0%)
-----


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...

Ten post edytował sannin 21.04.2009, 10:01:14
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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();
}


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sannin
post
Post #11





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

Ostrzeżenie: (0%)
-----


Rozumiem że muszę teraz dać warunek w który inputy będą ignorowane ? W jaki sposób to wykryć ?
Go to the top of the page
+Quote Post
osl
post
Post #12





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
sannin
post
Post #13





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

Ostrzeżenie: (0%)
-----


Wiem, tylko że znamm tylko mierne podstawy JavaScript i nie wiem jak sprawdzić czy kliknięto input
Go to the top of the page
+Quote Post
pi_wo
post
Post #14





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 18.03.2009

Ostrzeżenie: (0%)
-----


Ż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. }
Go to the top of the page
+Quote Post
osl
post
Post #15





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

Ostrzeżenie: (0%)
-----


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

Ten post edytował osl 21.04.2009, 10:28:44
Go to the top of the page
+Quote Post
sannin
post
Post #16





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

Ostrzeżenie: (0%)
-----


Dzięki za pomoc smile.gif już działa
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 20:01