sannin
20.04.2009, 23:30:40
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
21.04.2009, 00:55:23
Opisz dokładniej problem bo nie za bardzo rozumiem o co Ci chodzi.
sannin
21.04.2009, 08:58:36
Chodzi o to że mamy coś takiego:
<div onclick="alert('test');"> <input type="submit" name="aa">
W takim układzie jeżeli kliknę na inputa zostanie wyświetlony alert, a mi chodzi o to żeby się nie wyświetlał.
piotrooo89
21.04.2009, 09:40:23
to dodaj dla inputa onclick...
sannin
21.04.2009, 09:45:17
Próbowałem tak, wtedy najpierw wykonuje onclick dla inputa, a potem dla diva :/
piotrooo89
21.04.2009, 09:46:28
to ty jak w końcu chcesz? usuń onclick z diva i będziesz miał tylko dla inputa.
nospor
21.04.2009, 09:49:23
@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
21.04.2009, 09:58:47
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:
<script type='text/javascript' LANGUAGE="JavaScript"> var ostatni_node_pod_mysza = "";
function node_pod_mysza(mEvent)
{
// Internet Explorer
if (mEvent.srcElement)
{
ostatni_node_pod_mysza = mEvent.srcElement.nodeName;
}
// Netscape and Firefox
else if (mEvent.target)
{
ostatni_node_pod_mysza = mEvent.target.nodeName;
}
}
function test(){
if(ostatni_node_pod_mysza == "INPUT") alert("To jest INPUT więc nie działam");
else alert("Teraz działam...");
}
<body onMouseDown="node_pod_mysza(event);"> tresc tresc tresc tresc tresc tresc
<br><input id="blabla" value="blablabla"><br> tresc tresc tresc tresc tresc tresc
<br>
Pewnie znajdzie się jakieś prostsze rozwiązanie... ale mi nic bardziej eleganckiego nie przychodzi do głowy.
sannin
21.04.2009, 09:58:52
Cytat(nospor @ 21.04.2009, 10:49:23 )

@sannin daj dla inputa:
onclick="return false;"
powinno pomoc
Niestety nie działa

edit: zadziałało w ten sposób że ten input nie wysyła formy...
nospor
21.04.2009, 10:02:09
http://www.quirksmode.org/js/introevents.htmlCytat
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
21.04.2009, 10:14:15
Rozumiem że muszę teraz dać warunek w który inputy będą ignorowane ? W jaki sposób to wykryć ?
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
21.04.2009, 10:19:40
Wiem, tylko że znamm tylko mierne podstawy JavaScript i nie wiem jak sprawdzić czy kliknięto input
pi_wo
21.04.2009, 10:25:41
Że tak bezczelnie zaflooduje, sprawdziłeś moje rozwiązanie ?

Rozwijając to co napisałem wyżej:
function test(){
if(ostatni_node_pod_mysza != "INPUT"){
//Działam tylko gdy ostatni kliknięty objekt nie był inputem
//i dalej co tam ta funkcja ma robić
}
}
sannin, chyba się zakręciłeś troche

wrzuć
<input type="text" onclick="doSomething(event)" />
i użyj funkcji podesłanej przez
nospor
sannin
21.04.2009, 10:37:33
Dzięki za pomoc

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.