Newsgroup: it.comp.lang.javascript
Titolo: Re: Disabilitare div figli

 ora provo :)
Bono, fermo! Quello che ti serve a te è semplicemente approfondire il
DOM e le sue API. Qua puoi trovare qualcosa:
#DOM w3c
http://www.w3.org/DOM/
#DOM Gecko
http://developer.mozilla.org/en/docs/Gecko_DOM_Reference
#DOM IE
http://msdn2.microsoft.com/en-us/library/ms533050.aspx
Nel tuo caso se vuoi avere *tutti* i div presenti in un dato tag, non
solo i figli, avendo il riferimento all'elemento padre puoi fare:
	var els = div.getElementsByTagName("div");
-- 
~ ..ma in effetti il  concetto di WYSIWYG (quello che vedi è quello
che ottieni) si applica ai computer malissimo, così  come si applica
alle  donne... (The  Real Programmer)

  dentro dei div annidati sotto un div principale
[cut]
IMHO la cosa più semplice è recuperare il riferimento del div contenitore e
poi prelevare l'array di tutti gli elementi input che ci sono al suo
interno e in fine ciclarli e quelli che sono di tipo text (o quello che
vuoi) li disabiliti...
es.:
var container = document.getElementById('cont');
var inputs = container.getElementsByTagName('input');
var i = inputs.length;
while( i-- )
   if( inputs[i].type == 'text' || ... )
       inputs[i].disable = true;

 no?
Certo, ma ti ripeto: è inutile.
Hai delle API native che svolgono il medesimo compito, non ha un gran
senso riscrivere tali funzioni a livello di scripting.
In ogni caso, per filtrare i tag, ti basterebbe recuperare il tagName
e verificare che sia eguale a "DIV":
	if ( children[i].tagName == "DIV" ){
		// è un div.
	}
Ti rinnovo il consiglio di approfondire le DOM API sui link che ti ho
già fornito, comunque. Questo genere di cose le trovi tutte li.
-- 
~ Ci sono tre modi di fare le cose.
Giuste, sbagliate e come dico io. (Robert De Niro in "Casinò")

 vuoi) li disabiliti...
[cut]
Obbravo, ma devi tener conto anche delle select e delle textarea, non
solo degli input, ad esempio.
La cosa migliore, in casi come questi, è verificare il tipo di markup
che si ha di fronte.
Potrebbe essere più performante iterare i nodi discendenti, piuttosto
che fare diversi cicli e getElementsByTagName.
-- 
~ "Un uomo è più 'grande' di un altro solo se sale sulle sue spalle."
(Bertold Brecht)

 solo degli input,
ah già ci sono anche quelli  :P





Aggiungo che, delle volte, anche se non viene usato per lo scopo per
cui è nato, è preferibile mettere i succitati tag come nodi figli di
un tag form, in modo da poterli facilmente recuperare, a prescindere
dalla loro posizione gerarchica o tipologia di campo.
Anche se poi, appunto, non viene fatto alcun tipo di submit "vecchia
maniera".
-- 
~ Io ho una filosofia semplice:
Riempi ciò che è vuoto. Vuota ciò che è pieno. Gratta ciò che prude.
(A. R. Longworth)

 cmq già bloccare i campi text mi basta e avanza
Se il tuo problema è solo fermare il click, puoi tranquillamente
ovviare alla cosa impostando un div superiore che intercetti gli
eventi del mouse, così che non raggiungano il div inferiore, che
contiene gli elementi in questione.
E' la "tecnica" che ora è diventata in voga col "web 2.0" e dato
che hai detto che di "select" non ne hai, non rischi problemi di
compatibilità con IE<7.
-- 
~  "FINARMENTE  LI SFRATTATI AVRANNO UN TETTO SULLA  TESTA!
 ...però tirato ammodino, un  tegolo pe' vorta.." (Il vernacoliere)

 non vorrei entrare nella valle di lacrime dei div a coordinate :)
Dipende tutto da com'è strutturata la tua pagina, e soprattutto
dal div che vuoi bloccare.


  so, onclick return false?
no, mi sa' la prima che avevi detto...

 </div>
No, se hai impostato degli eventi sui tag figli vengono scatenati
comunque prima questi. Parlavo proprio di sovrapposizione. Ripeto
comunque, che è utile solo per gli eventi del mouse.
Il principio è più o meno questo, benché in questo caso sia stato
applicato alla pagina intera:
 
http://www.huddletogether.com/projects/lightbox/
-- 
~ "Tutto quello che devi fare è chiamarmi;
sarò tutto quello di cui hai bisogno" (Peter Gabriel)

 mi restituisce eventuale id del div che lo contiene?
Puoi usare "parentNode", che ti restituisce il nodo genitore di quello
sul quale stai lavorando:
	if ( 
el.parentNode.id
 != "pippo" ){
		// do something
	}
Puoi anche controllare l'elemento diretto, ne se hai il riferimento:
	var els = div.getElementsByTagName("*");
	for (var i=0;i<els.length;i++)
		if ( els[i].parentNode != div ){
			// do something
		}
In pratica questo codice lavora solo dai nodi "nipoti", in avanti.
-- 
~ La donna č un male, ma un male necessario.
(Aulo Gellio)

 scusate la confusione mentale :)
Dunque. Uno, ti consiglio di prenderti un caffé e fare innanzitutto
chiarezza nella tua confusione mentale. :)
Due, ti rinnovo l'invito a leggere le reference delle DOM API, dato
che avresti trovato risposta a tutte le domande che hai posto.
-- 
~ Il lavoro è prezioso. Non essere egoista! Lascialo agli altri!

 si, bè, per forza no, 
No, la cosa non è assolutamente scontata. Puoi benissimo aver
dei campi per l'inserimento, senza che vi sia alcuna form.
Non è obbligatorio, né a livello di validazione, né a livello
di logica di programmazione.
Come vedi, senza avere sotto gli occhi il codice HTML è molto
difficile darti una mano.
-- 
~ "Non si chiama coraggio se non hai paura."
("Bounce")