*/ ?>

Políčka s hintom

V niektorých prípadoch je užitočné ukázať užívateľovi nápovedu k formulárovému políčku priamo ako hodnotu políčka. Šetrí to priestor a pre užívateľov je to pohodlné a zrozumiteľné. Stačí na to pár riadkov JavaScriptu. Ale bacha, má to svoje drobné nástrahy.

Zhodou okolností na túto tému nedávno písal Thomas Fuchs v článku Using input values as hints, the easy way. Jeho riešenie je krásne a jednoduché. Ja osobne však v praxi používam niečo trošku komplikovanejšie.

Čo má skript robiť?

Skript by mal políčko asociovať s nejakou defaultnou hodnotou. Ak je políčko prázdne a neaktívne (nie je na ňom focus), defaultná hodnota by sa v ňom mala zobraziť zašednutá (alebo nejak inak vizuálne potlačená). Akonáhle užívateľ políčko vyplní alebo do neho chce niečo písať (políčko získa focus), malo by sa opäť správať štandardne.

Počas implementácie si hlavne treba dať pozor na jednu veci:

Pri submitnutí formulára treba skontrolovať, či užívateľ skutočne niečo do políčka vložil. Ak to neurobíš, budú sa ti na server posielať hinty z nevyplnených políčok. Samozrejme, môžeš si to ošetriť aj na stran servera. Je to na tebe.

Základ

Objekt ktorý sa mi o hint v políčku postará si nazvem FieldHint.

var FieldHint = Class.create({

	initialize : function ( field, hint ) {
		this.field = $( field );
		this.hint = hint;

		this.field.observe( 'focus', this.focus.bind( this ) );
		this.field.observe( 'blur', this.blur.bind( this ) );

		this.blur(); // inicializacne spustenie
	},

	focus : function () {
		if ( this.field.value == this.hint ) {
			this.field.value = '';
		}
	},

	blur : function () {
		if ( ( this.field.value == '' ) || ( this.field.value == this.hint ) ) {
			this.field.value = this.hint;
		}
	}

});

Ošetrenie submitu

Pred odoslaním obsahu formuláru ešte treba zaistiť, aby sa neposlali aj hinty.

Toto síce vyzerá zložito, ale v skutočnosti na to už máš všetko čo potrebuješ (deje sa to v metóde focus()). Takže ju stačí pred submitom iba zavolať:

this.field.form.observe( 'submit', this.focus.bindAsEventListener( this ) );

Customizácia a formátovanie

Chýba posledná vec: Formátovanie políčka keď obsahuje hint (napr. šedý text) a nejaká jednoduchá možnosť customizácie.

var FieldHint = Class.create({

	options : {
		hintClass : 'hint'
	},

	initialize : function ( field, hint, options) {
		this.field = $( field );
		this.hint = hint;
		Object.extend( this.options, options || {} );

		this.field.observe( 'focus', this.focus.bind( this ) );
		this.field.observe( 'blur', this.blur.bind( this ) );

		this.field.form.observe( 'submit', this.focus.bindAsEventListener( this ) );

		this.blur();
	},

	focus : function () {
		this.field.removeClassName( this.options.hintClass );
		if ( this.field.value == this.hint ) { this.field.value = ''; }
	},

	blur : function () {
		if ( ( this.field.value == '' ) || ( this.field.value == this.hint ) ) {
			this.field.addClassName( this.options.hintClass );
			this.field.value = this.hint;
		}
	}

});

Praktická ukážka

Otvoriť praktickú ukážku

Tip na ďalšie rozširovanie

Hinty v políčkach sa často používajú ako náhrada za labely, obzvlášť ak designer potrebuje šetriť miestom. Labely by sa dali jednoducho skryť pomocou CSS a následne použiť pri automatickej inicializácii hintov. Asi takto:

HTML

<label class="hint" for="idPolicka">label policka</label>

CSS

label.hint { display: none; }

JS

document.observe( 'dom:loaded', function () {
	$$( 'label.hint' ).each( function ( elm ) {
		new FieldHint( elm.for, elm.innerHTML );
	} );
} )
  1. Zmena štandardného správania Enteru vo formulári
  2. Zvýrazňovanie zaškrtnutých položiek
  3. Filtrovanie obsahu dokumentu bez použitia Ajaxu
  4. Dynamicky generovaný iframe
  5. Pridávaním metód k fajnovému hoveru

Zverejnené 14.1.2009
v kategórii JavaScript.

Nálepky:
, , , ,

Autor článku

Riki Fridrich, http://fczbkk.com

Som taký dobrý, že som sám sebe vzorom.

Vyjadri sa

Tvůj komentář se zobrazí, až ho některý z adminů schválí. Zveřejňovat budeme pouze hodnotné komentáře, které se přímo týkají tématu.


O projekte

Tento projekt vznikol, pretože všetky odborné weby sajú a my sme tým pádom nemali kde publikovať svoje články.