logo

INTERNETNE STORITVE

- IZDELAVA SPLETNIH STRANI - OBLIKOVANJE - PROGRAMIRANJE DODATKOV

Spreminanje input type text v input type password - Javascript

Pri projektu na katerem trenutno delam sem moral narediti Javascript, ki spremeni HTML Input objekt, ki je tipa text v tipa password. Zadeva je morala delovati v vseh standardnih brskalnikih (preizkušeno na IE 5.5, 6.0, 7.0, Opera, Safari, Firefox).

#1 HTML Input objekt tipa text, ki ga hočemo spremeniti v tipa password

HTML:
  1. <input name="password" onfocus="changeInputType(this, 'password');" type="text" value="Password" />

Javascript koda:

JAVASCRIPT:
  1. function changeInputType(prevObject, type) {
  2.     var passInput = document.createElement('input');
  3.     passInput.setAttribute('type', type);
  4.     passInput.setAttribute('name', prevObject.getAttribute('name'));
  5.     passInput.className = 'logfield';
  6.     passInput.id = 'passInput';
  7.     prevObject.parentNode.replaceChild(passInput, prevObject);
  8.  
  9.     setTimeout("focusInput('passInput');", 1);
  10. }

Opis:
Najprej kreiramo nov input objekt, dodamo tip objekta (v našem primeru password), določimo isti ime kot ga ima naš trenutni input katerega želimo zamenjati. Po želji dodamo še CSS class (za IE je potrebno uporabiti className = 'css class'. Potrebujemo še ID, da bomo lahko element potem fokusirali.

Ko imamo element pripravljen ga nadomestimo z prejšnim elementom (elementom input type text v našem primeru). Če uporabimo sledeče kodo za fokusiranje elementa:

JAVASCRIPT:
  1. passInput.focus();

... zadeva NE deluje v IE. Če pa vmes naredimo malce pavze (lahko naredimo tudi zanko za določeno število milisekund) in fokusiramo element potem zadeva začne delovati tudi v IE:

JAVASCRIPT:
  1. function focusInput(objectID) {
  2.     document.getElementById(objectID).focus();
  3. }

Datoteke:

Dodatne informacije:

Delodajalec: Pangaea.si

11x komentirano na “Spreminanje input type text v input type password - Javascript”

  1. m je napisal:

    Drugo vprašanje je, zakaj bi to sploh hotel naredit. Js se konkretno ne spomnim primera, da oz. zakaj bi spreminjal navadno polje v password. Elaborate?

  2. Roky je napisal:

    Pri nam je bilo tako, da je bilo v designu narejen da sta pri loginu dva inputa kjer Piše znotraj Inputa:

    Username | Password

    In če uporabiš type="password", pol se namesto Password izpiše "********". Bom dodal gor primer.

  3. Carli je napisal:

    V bistvu dober primerek! Bravo!

  4. Roky je napisal:

    Jp. Primerek delovanja kjer je še malce boljša koda, ki input še če je prazen ali vsebuje Password spremeni nazaj v text input.

  5. FRiK je napisal:

    Jaz sem tole naredil na malo bolj začetniški način :)

    HTML:

    JS:
    function izprazni_pass() {
    if(document.loginform.password.value == "geslo") {
    document.loginform.password.value = "";
    document.loginform.password.type = "password";
    }
    }

    //če uporabnik nič ne vpiše v input
    function napolni_pass() {
    if(document.loginform.password.value == "") {
    document.loginform.password.type = "text";
    document.loginform.password.value = "geslo";
    }
    }

  6. Boštjan je napisal:

    u bistvu ne razumem zakaj je treba zamenjat objekt... lahko tudi po začetniško rešiš (nastaviš type = password), pa še bolj enostavno je :D razn če je kej uzadi, da to ne dela v x brskalnikih...

  7. Carli je napisal:

    Zato da je fenci-šmenci ... to se danes prodaja :D

  8. Arjan je napisal:

    Na tak način je to "nevarno" za tiste ki imajo izklopljen javascript

    Boljše bi bilo najprej narediti input tipa password in ga onload() spremeniti v tekst

  9. Roky je napisal:

    Arjan: Tudi če nimajo javascript se uporabi text, kar pomeni da bo logiranje tudi uspelo, ker se POST podatki enako prenesejo kot pri password ali pa pri type.

    Boštjan@FriK: Type=password ne deluje na vseh brskalnikih, drugače bi z veseljem to uporabil.

  10. arjan_t je napisal:

    ja samo lahko kdo vidi password, to je problem, ne kaj druga ...

  11. Roky je napisal:

    arjan_t, to pa imaš prav ja. Se strinjam.

Dodaj komentar