Autor Zpráva
costim
Profil *
Mám klasický inut:
<input id="pass" type="text" name="pass" value="Přihlašovací heslo..." maxlength="30"  placeholder="Přihlašovací heslo..." >
<script type="text/javascript">$('#pass').on('input',function(e){jsTypePass(this)});</script>

kde:
$.fn.hasAttr = function(name) {  
   return this.attr(name) !== undefined;
};
function jsTypePass(en) {
  var e = $(en);
  
 if ((e.hasAttr('placeholder') && (e.val() == e.attr('placeholder')))  || (e.val() == "")) {
    if (e.attr('type') == "password") e.attr('type', 'text');
  }      
  else {
    if (e.attr('type') == "text")  e.attr('type', 'password');  
  }
}

změna na typ password funguje dle pravidel, ale při zadání prvního znaku zmizí kurzor a při dalším stisknutí tlačítka se již kurzor zobrazí ale na první pozici a tudíž další znak se začne psát před tím prvně vloženým
nevím, kde je chyba
Moc děkuji za radu
_es
Profil
costim:
A čo má to celé vlastne výsledne robiť? Asi to aj tak nebude funkčné v niektorých prehliadačoch.
costim
Profil *
_es:
Má to měnit input type='text' na type='password'.
Jestliže text je "" nebo placeholder, pak type='text', jinak type='password'
_es
Profil
costim [#3]:
Aj tak nerozumiem. Prečo to nie je normálne jednoducho type=password? Aký to má mať praktický zmysel?
costim
Profil *
Když chceš zobrazit text z placeholder tak přece chceš, aby byl čitelný, nebo né?
Nebo dělám ještě neco špatně?
_es
Profil
costim:
zobrazit text z placeholder
Ako špeciálne ho chceš zobrazovať? V prehliadačoch, ktoré placeholder podporujú, predsa funguje aj pri type=password. V starších, ktoré to nepodporujú, ti aj tak nebude fungovať udalosť oninput.
costim
Profil *
_es:
Aha, takže z hlediska kompatibility a jednoduchosti by bylo lepší raději placeholder nepoužívat.
Ve starších prohlížečích nefunguje oninput? A jak tedy mohu reagovat na změnu textu v inputu?
_es
Profil
costim:
Aha, takže z hlediska kompatibility a jednoduchosti by bylo lepší raději placeholder nepoužívat.
Alebo používať, no rátať s tým, že sa v starších prehliadačoch nezobrazí, viď aj článok HTML atribut placeholder.

Ve starších prohlížečích nefunguje oninput? A jak tedy mohu reagovat na změnu textu v inputu?
Rôznymi inými udalosťami, viď článok JS událost oninput.
costim
Profil *
_es:
Hmm, no já dříve používal událost onkeyup, jenže když byl text doplněn přes nabízenou hodnotu, nijak nebyla změna obsloužena.
Zkusím to ještě přes událost onpaste.
costim
Profil *
Tak už jsem to vyřešil, jen ještě jeden dotaz.
Jakou událost ošetřit, když do inputu výběrem vložím text, který je přednastavený od dřívějšího zadání?
děkuji za radu
Chamurappi
Profil
Reaguji na costima:
Atribut placeholder slouží jako ukázka hodnoty, takže u hesla trochu postrádá smysl. Zneužívat ho místo <label>u je hnus.

Jakou událost ošetřit, když do inputu výběrem vložím text, který je přednastavený od dřívějšího zadání?
Spolehlivě? Jedině setIntervalem kontrolujícím pravidelně hodnotu.

Proč používáš attr na přístup k vlastnostem?
costim
Profil *
Chamurappi:
placeholder - ok, chápu, nepřipadalo mě to až tak zcestné řešení...
setIntervalem - na netu jsem našel příklad http://jsfiddle.net/pxfunc/5kpeJ/ , vykoušel jsem (zatím jen na FF) řešení $('#prvek').bind('input', function() {}); a fungovalo jak při zadávání, vkládaní i při výběru. Je to spolehlivé řešení nebo mohou nastat někde problémy?
attr - aha, podle příspěvku doporučujete raději konkrétní přístup k hodnotám

dik za info
_es
Profil
costim:
vykoušel jsem (zatím jen na FF) řešení $('#prvek').bind('input', function() {}); a fungovalo jak při zadávání, vkládaní i při výběru. Je to spolehlivé řešení nebo mohou nastat někde problémy?
Je to len jQuery obal na udalosť oninput, takže to v starších prehliadačoch fungovať nebude - napríklad v IE8. To si sa mohol dozvedieť aj z jedného odkazovaného článku v [#8].
costim
Profil *
_es:
Aha, takže jediná možnost pro všechny prohlížeče je pomocí časovače?
Na netu jsem našel následující příklad pro prvek #timer

$('#timer').focus(function() { startTimer();}).blur (function() { endTimer(); });

var lastValue = "",
    $timer = $('#timer'),
    timerCheckCount = 0,
    checkInputChange = function() {
        timerCheckCount += 1;
        if (lastValue !== $timer.val()) {
            //nastala zmena
            lastValue = $timer.val();
        }
    },
    timer = undefined,
    startTimer = function() {
        timer = setInterval(checkInputChange, 200); 
    },
    endTimer = function() {
        clearInterval(timer);
        timerCheckCount = 0;
    };

Prosím, jak daný kód upravit, aby byl aplikovaný pro i jiné prvky input v jenom formuláři a né jen pro #timer
Děkuji za pomoc

Moderátor Davex: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
costim
Profil *
Prosím, jak daný kód upravit, aby byl použitelný pro více inputů v jednom formu, např.? Děkuji

$('#timer1').focus(function() { startTimer();}).blur (function() { endTimer(); });
$('#timer2').focus(function() { startTimer();}).blur (function() { endTimer(); });

var lastValue = "",
    $timer = $('#timer1'),
    timerCheckCount = 0,
    checkInputChange = function() {
        timerCheckCount += 1;
        if (lastValue !== $timer.val()) {
            //nastala zmena
            lastValue = $timer.val();
        }
    },
    timer = undefined,
    startTimer = function() {
        timer = setInterval(checkInputChange, 200); 
    },
    endTimer = function() {
        clearInterval(timer);
        timerCheckCount = 0;
    };

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: