Newsgroup: it.comp.lang.javascript
Titolo: Proprietà personalizzate sui controlli

Salve a tutti,
Sto scrivendo un'applicazione che permette di effettuare degli ordini
da un magazzino, il cliente seleziona il modello e specifica le qta, il
fatto è che le qta sono "limitate" hanno cioè un massimo (data dalla
disponibilità di esse).
Praticamente mi creo server side una griglia con delle textbox dove si
devono specificare le qta.
Adesso .. volevo implementare i "massimi" utilizzando Js e per farlo
vorrei aggiungere una proprietà "maxValue" alla textbox per porterla
poi utilizzare sull'evento keypress.
Prima di perdere tempo volevo sapere se:
- esiste un modo universale (che vada su tutti i browser)
- esiste il modo di imlementare un eventhandler unico per la gestione
dei keypress su i vari textbox
- è fattibile?
Grazie a tutti

 dei keypress su i vari textbox
Potresti raggruppare i textbox come figli di un elemento (div, fieldset) e
associare l'event handler a quello. Poi recuperare chi ha scatenato
l'elemento tramite target o srcElement.
Oppure associare la medesima funzione a tutti i textbox. Presupponendo che
abbiano name uguale, ad esempio:
function myhandler(evt){
	evt=evt||window.event;
	alert(this.getAttribute("maxvalue")+"\r\n"+evt.keyCode);
}
var txts = document.getElementsByName("myText");
for (var i=0;i<txt.length;i++)
	txt[i].onkeypress = myhandler;
Ovviamente il "name" non è obbligatorio: l'importante è avere un criterio
con cui riuscire ad ottenere una lista degli input al quale vuoi assegnare
l'handler (tutti figli dello stesso elemento padre, e via dicendo ad
esempio)
-- 
~ Non prendere la vita troppo sul serio: Non ne uscirai vivo in ogni caso.

Quindi non c'è modo di farlo via XHTML così:
<input type="text" maxvalue="243" id="my-text" />
Devo quindi trovare un'altro modo...
Così su due piedi che ne pensi di un'array di controlli?
Mi creo un array e ci metto dentro tutti i textbox e ci aggiungo le mie
proprieta, mi gestisco il keydown sulla tabella che li contiene e mi
cerco la text in base all'ID.
Fattibile?
Magari prototipizzando le textbox in modo che il controllo del minimo
la faccia "da se".
(forse sta cosa del prototype nn si può fare, nn sono molto avvezzo a
ste cose)
Grazie
ZER0 ha scritto:


 Devo quindi trovare un'altro modo...
<script type="text/javascript">
  window.onload=function() {
 document.forms[0].elements['nametuoinput'].setAttribute("maxvalue","243");
    // 
http://developer.mozilla.org/en/docs/DOM:element.setAttribute
  } 
</script>
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 Grazie
De nada.
-- 
~ Tutti quelli che credono nella psicocinesi, per favore alzino la mia mano.

Si si avevo capito che era un prob di validatore.
La cosa nn mi importerebbe è un sito "b2b" quindi nn è essenziale (il
sito Transitional-valido ma può non esserlo questa pagina).
grazie, seguirò il tuo consiglio.
(Ma nemmeno IE7 conosce i prototype???)
ZER0 ha scritto:


Continuo qui ...
Ok ho fatto tutto, adesso devo prendere i valori delle varie textbox e
qui viene il problema.
Volevo prendere tutti gli oggetti della TR con il metodo
getElementsByName ma se lo faccio dal Document chiaramente me li
ritorna tutti, se provo dall'elemento tr (ci arrivo assegnando un id al
tag tr) non esiste il metodo getElementsByName per il tr.
Quindi, non posso ciclare in tutti i vari child del tr perchè se non
c'è disponibilità in una colonna non mostro la textbox quindi non è
detto che in quel determinato TD ci sia il mio oggetto textbox.
Esiste un metodo veloce?
Volevo evitare di ciclare in tutti i td e vedere se il children di un
children è un oggetto textbox, tanto per semplificare ed evitare
eventuali errori .
grazie.
Mello ha scritto:


 detto che in quel determinato TD ci sia il mio oggetto textbox.
Ma perché dovresti fare una cosa del genere?
-- 
~ La donna è un male, ma un male necessario. (Aulo Gellio)

Ti spiego, si tratta di vendite da magazzino di capi di
abbigliamento...
Nelle varie colonne metto le disponibilità per taglia,
quindi se un capo non ha disponibilità in una taglia non metto la
textbox.
quindi devo (per una riga che corrisponde al modello) prendere le varie
qta richieste per scriverle nel db ( utilizzo un alibreria Ajax per
chiamare i metodi server side) passandole sotto forma di Array al
metodo.
ZER0 ha scritto:


 metodo.
Scusa, ma continuo a non capire dove sta il problema; rispetto a quanto
abbiamo già detto in questo thread.
-- 
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere uno
o piu' ordigni nucleari" (ZER0 & Cosimo)

Il problema sta in questo, io devo aggiornare solo ed esclusivamente
una riga per volta, se la tabella contiene (come potrebbe) qualche
centinaia di modelli il numero di textbox supera le migliaia.
Io voglio il valore delle sole textbox della riga.
Cmq ho risolto alla meno peggio in questo modo:
function GetSelQta(row){
    var tr = findControl(row);
    var txts = document.getElementsByName("editText");
    var txt;
    var max,ind,i;
    var Arr = new Array();
    for (i=0;i<txts.length;i++){
        txt= txts[i];
        if(txt.parentNode.parentNode==tr){
            max= txt.getAttribute("maxValue");
            ind = txt.getAttribute("index");
            if (txt.value<=max){
                Arr[ind] = parseInt(txt.value);
            }
        }
    }
    return Arr;
}
row è l'id del tag TR
ZER0 ha scritto:
