Autor | Zpráva | ||
---|---|---|---|
costim Profil * |
#1 · Zasláno: 29. 9. 2014, 19:23:02 · Upravil/a: Moderátor (editace znemožněna) 1. 10. 2014, 20:51:39
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 |
#2 · Zasláno: 29. 9. 2014, 19:31:21
costim:
A čo má to celé vlastne výsledne robiť? Asi to aj tak nebude funkčné v niektorých prehliadačoch. |
||
costim Profil * |
#3 · Zasláno: 29. 9. 2014, 19:34:23
_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 |
#4 · Zasláno: 29. 9. 2014, 20:07:47
costim [#3]:
Aj tak nerozumiem. Prečo to nie je normálne jednoducho type=password ? Aký to má mať praktický zmysel?
|
||
costim Profil * |
#5 · Zasláno: 29. 9. 2014, 20:14:14
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 |
#6 · Zasláno: 29. 9. 2014, 20:20:56
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 * |
#7 · Zasláno: 29. 9. 2014, 20:36:03
_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 |
#8 · Zasláno: 29. 9. 2014, 20:43:11
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 * |
#9 · Zasláno: 29. 9. 2014, 21:08:35
_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 * |
#10 · Zasláno: 30. 9. 2014, 20:16:06
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 |
#11 · Zasláno: 30. 9. 2014, 21:38:04
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ě setInterval em kontrolujícím pravidelně hodnotu.
Proč používáš attr na přístup k vlastnostem?
|
||
costim Profil * |
#12 · Zasláno: 30. 9. 2014, 22:19:28
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 |
#13 · Zasláno: 1. 10. 2014, 18:32:24
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
![]() |
||
Časová prodleva: 3 dny
|
|||
costim Profil * |
#15 · Zasláno: 4. 10. 2014, 13:09:48
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; }; |
||
Časová prodleva: 10 let
|
0