Leif Neland forklarede:
> Kan dette gøres elegantere?
>
> function setOnChange() {
> for (var i=0; i<document.forms.length; i++)
> {if (document.forms[i].length)
> {for (var j=0; j<document.forms[i].length; j++)
>
> {
> if(!(document.forms[i][j].onchange)) {
> document.forms[i][j].onchange = function ()
> {haschanged(this.name);}
> }
> }
> }
> }
> }
>
> Bruges til at sikre at brugeren ikke forlader en form, der er ændret i, uden
> at gemme ændringerne.
Det ser tilforladeligt ud. (Forstår ikke lige hvorfor Emnet nævner
JQuery - det er helt almindeligt JS...
)
Jeg ikke sikker på, jeg ville bruge
function () { haschanged(this.name); }
men det kommer selvfølgelig an på funktionen haschanged() - umiddelbart
vi det være nemmere bare at bruge
function () { haschanged(this); }
det vil overføre elementet, ikke kun elementets navn. Og elementets nav
kan ikke umiddelbart bruges til ret meget (name er ikke unik som id er
det - og der er ikke en nem måde at finde elementet på.) Men hvis det
bare er til en alrt eller lignende, er det nok ligemeget.
(Hvis det overhovedet er rigtigt at bruge this der, og på den måde..?)
En anden tanke kan være at tekster, labels etc., der måtte stå i
formen(e), også vil få sat en onchange - og det accepterer de vist ikke
alle. Så en test på om det faktisk er et element, det giver mening at
have en onchange på, vil nok have en berettigelse.
F.eks.
var types = array( 'text', 'password', 'checkbox', 'radio', 'file');
if (( document.forms[i][j].tagName == 'INPUT') &&
( types.indexOf( document.forms[i][j].type) > -1))
indsat de rigtige steder, forstås...
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk