Első üres szövegmező aktiválása a formon

Ha formokkal dolgozunk, általában szokás mondjuk onLoad-kor rátenni a focust valamelyik mezőre, ezzel is segítve a kitöltést. Prototypeban van gyárilag Form.focusFirstElemet(), az viszont aktiválja a már kitöltött mezőt is + checkboxra, radiobuttonra is rááll. Készítettem ezért egy új metódust a Form osztálynak, ami megoldja a problémát.

Object.extend(Form, {
 focusFirstEmpty: function(formElm) {
 	$A(formElm.getInputs()).each(function(elm) {
 		if(!$(elm).hasClassName('readOnlyInput')
 			&& $F(elm) == ''
 			&& (Element.readAttribute(elm, 'type') == 'text'
 				|| Element.readAttribute(elm, 'type') == 'password'
 				|| Element.readAttribute(elm, 'type') == 'file'
 				|| elm.tagName == 'TEXTAREA')) {
 			Field.focus(elm);
 			throw $break;
 		}
 	});
 }
});

Használat:

Event.observe(window, 'load', function() {
 Form.focusFirstEmpty($('myForm'));
});

(Egy form element azonosítót vár, utána pedig annyit csinál, hogy összeszedi a mezőket egy tömmbe, végigmegy rajtuk, majd az első, amelyik nem readonly, üres illetve text, password, file vagy texarea típusú az megkapja a focust.)

3 hozzászólás

  1. Benjamin, 2008. január 7., 16:23

    Sztem ez valtozo lehet (elofordulhat h. az altalad kizart mezokre kell rakni a focust), nem egyszerubb oldal / formhoz igazitva megmondani h. (itt most ebben az esetben) EZEN a mezon legyen a focus?

     
  2. zsolti, 2008. január 7., 16:33

    Pont azt szerettem volna kiváltani, mivel eddig így nézett ki:

    if($(’mail’) && $(’mail’).tagName == ‘INPUT’) {
    if($F(’mail’) != ”) Field.focus(’pass’);
    else Field.focus(’mail’);
    }

    …meg ilyenekből még 60 sor. (Persze speciális eset, egyet értek, de ezért tettem közzé, hogy akinek hasonló kell, ebből kiindulhat.)

     
  3. cadmagician, 2008. január 7., 16:36

    akkor használod a $(’mezo-id’).focus(); -t

     

Új hozzászólás: