Thread View: pl.comp.lang.javascript
10 messages
10 total messages
Started by Grzegorz Jakóbik
Thu, 06 Jan 2011 13:40
Problem z zmianą typu obiektu input
Author: Grzegorz Jakóbik
Date: Thu, 06 Jan 2011 13:40
Date: Thu, 06 Jan 2011 13:40
44 lines
2444 bytes
2444 bytes
Mam taki malutki problem zrobiłem sobie pole typu input w którym jest
wpisane "Hasło" po najechaniu na to pole słowo "Hasło" znika i można
wpisywać hasło z klawiatury. Tak więc na początku pole input ma typ TEXT a
po kliknięciu na niego ma typ PASSWORD czyli nie widać literek i wszystko by
działało ok, gdy nie jeden denerwujący problem że po zmianie typu z TEXT na
PASSWORD kursor znika i znowu trzeba kliknąć na to okienko aby coś wpisać.
Poniżej kod HTML/JAVASCRIPT:
---cut here---
<script type="text/javascript">
function setFocus()
{
document.getElementById("xyz").focus();
}
function zamien(id){
var e = document.getElementById(id);
var n = document.createElement('input');
n.type = e.type.toLowerCase() == 'password' ? 'text' : 'password';
n.name = e.name;
n.value=e.value;
n.id = e.id;
e.parentNode.replaceChild(n, e);
setFocus();
}
</script>
<form>
<p>
<input type="text" name="Haslo" id="xyz" value="Hasło:"
onFocus="if(this.value=='Hasło:'){this.value=''; zamien('xyz');}" />
</p>
</form>
---cut here---
Teraz pytanie czy da się to jakoś obejść żebym po kliknięciu na pole w
którym widnieje napis "Hasło" od razu mógl pisać bez kolejnego klikania na
nie ? Bo teraz jak widać po kliknięciu znika napis "Hasło" typ pola się
zmienia ale niestety muszę ponownie kliknąć abym mógł coś pisać. Jak widać
powyżej póbowałem już z funkcją focus i nie działa jakoś.
Z góry dziękuję za wszelką pomoc
G.J.
Re: Problem z zmianą typu obiektu input
Author: Kviat
Date: Thu, 06 Jan 2011 18:51
Date: Thu, 06 Jan 2011 18:51
31 lines
2107 bytes
2107 bytes
W dniu 06-01-2011 14:40, Grzegorz Jakóbik pisze:
> Mam taki malutki problem zrobiłem sobie pole typu input w którym jest
> wpisane "Hasło" po najechaniu na to pole słowo "Hasło" znika i można
> wpisywać hasło z klawiatury. Tak więc na początku pole input ma typ TEXT
> a po kliknięciu na niego ma typ PASSWORD czyli nie widać literek i
> wszystko by działało ok, gdy nie jeden denerwujący problem że po zmianie
> typu z TEXT na PASSWORD kursor znika i znowu trzeba kliknąć na to
> okienko aby coś wpisać. Poniżej kod HTML/JAVASCRIPT:
>
> ---cut here---
> <script type="text/javascript">
> function setFocus()
> {
> document.getElementById("xyz").focus();
> }
>
Ten problem to w IE.
zamiast
document.getElementById("xyz").focus();
zrób
setTimeout(function() { document.getElementById('xyz').focus(); }, 10);
To ma związek z szybkością (problemem?) renderowania inputa w IE, focus
wykonuje się zanim input zostanie wyrenderowany.
W FF i Operze document.getElementById("xyz").focus(); zadziała prawidłowo.
Pozdrawiam
Piotr
Re: Problem z zmianą typu obiektu input
Author: Grzegorz Jakóbik
Date: Fri, 07 Jan 2011 16:42
Date: Fri, 07 Jan 2011 16:42
44 lines
2450 bytes
2450 bytes
Witam dziękuję serdecznie za pomoc, działa wyśmienicie ale teraz pytanie jak
bym chciał to dalej rozbudować żeby po opuszczeniu pola gdy jest puste
skrypt
znowu zmieniał typ na text i zawartość na słowo "Hasło", kod wyglądał by
tak:
---cut here---
<script type="text/javascript">
function setFocus()
{
setTimeout(function() { document.getElementById('xyz').focus(); }, 10);
}
function zamien(id){
var e = document.getElementById(id);
var n = document.createElement('input');
n.type = e.type.toLowerCase() == 'password' ? 'text' : 'password';
n.name = e.name;
n.value = e.value;
n.id = e.id;
e.parentNode.replaceChild(n, e);
setFocus();
}
</script>
<form>
<p>
<input type="text" name="Haslo" id="xyz" value="Hasło:"
onFocus="if(this.value=='Hasło:'){this.value='';} zamien('xyz');"
onBlur="if(this.value==''){this.value='Hasło:'; zamien('xyz');}"/>
</p>
</form>
---cut here---
I teraz pierwsza cześć działa bez problemu a OnBlur wogóle ? dlaczego ? Gdy
wywale z tego kodu wogóle funkcję zamien('xyz'); wszystko chodzi niby ok
poza tym że nie zmienia typu pola, czyli mój wniosek samo OnBlur jest
poprawne więc w
czym problem ?
Jeśli jeszcze ostatni raz mogę prosić kogośo pomoc będę głęboko wdzięczny.
Pozdrawiam
G.J.
Re: Problem z zmianą typu obiektu input
Author: Peter May
Date: Sat, 08 Jan 2011 08:29
Date: Sat, 08 Jan 2011 08:29
48 lines
2628 bytes
2628 bytes
W dniu 2011-01-07 17:42, Grzegorz Jakóbik pisze:
> Witam dziękuję serdecznie za pomoc, działa wyśmienicie ale teraz pytanie
> jak
> bym chciał to dalej rozbudować żeby po opuszczeniu pola gdy jest puste
> skrypt
> znowu zmieniał typ na text i zawartość na słowo "Hasło", kod wyglądał by
> tak:
>
> ---cut here---
> <script type="text/javascript">
> function setFocus()
> {
> setTimeout(function() { document.getElementById('xyz').focus(); }, 10);
> }
>
> function zamien(id){
> var e = document.getElementById(id);
> var n = document.createElement('input');
> n.type = e.type.toLowerCase() == 'password' ? 'text' : 'password';
> n.name = e.name;
> n.value = e.value;
> n.id = e.id;
> e.parentNode.replaceChild(n, e);
> setFocus();
> }
> </script>
> <form>
> <p>
> <input type="text" name="Haslo" id="xyz" value="Hasło:"
> onFocus="if(this.value=='Hasło:'){this.value='';} zamien('xyz');"
> onBlur="if(this.value==''){this.value='Hasło:'; zamien('xyz');}"/>
> </p>
> </form>
> ---cut here---
>
> I teraz pierwsza cześć działa bez problemu a OnBlur wogóle ? dlaczego ? Gdy
> wywale z tego kodu wogóle funkcję zamien('xyz'); wszystko chodzi niby ok
> poza tym że nie zmienia typu pola, czyli mój wniosek samo OnBlur jest
> poprawne więc w
> czym problem ?
>
> Jeśli jeszcze ostatni raz mogę prosić kogośo pomoc będę głęboko wdzięczny.
Zrób to porządnie:
http://www.alistapart.com/articles/makingcompactformsmoreaccessible
--
Peter
Re: Problem z zmianą typu obiektu input
Author: Grzegorz Jakóbik
Date: Tue, 11 Jan 2011 23:22
Date: Tue, 11 Jan 2011 23:22
13 lines
1684 bytes
1684 bytes
Witam Owszem rozwiązanie które proponujesz działa ale inną metodą nakladania się divami a to nie do końca mi odpowiada. Ponad to nie wiem dlaczego piszesz zrób to porządnie czy coś w moim skrpcie jest nieporządnie ? Dużo mniej linijek i bez DIV-ów Zadaje sobie pytanie tylko dlaczego nie działa mi onBlur ? które nadal pozostaje bez odpowiedzi ? Pozdrawiam G.J.
Re: Problem z zmianą typu obiektu input
Author: Peter May
Date: Wed, 12 Jan 2011 13:54
Date: Wed, 12 Jan 2011 13:54
25 lines
2129 bytes
2129 bytes
W dniu 2011-01-12 00:22, Grzegorz Jakóbik pisze: > Witam > > Owszem rozwiązanie które proponujesz działa ale inną metodą nakladania > się divami a to nie do końca mi odpowiada. Ponad to nie wiem dlaczego > piszesz zrób to porządnie czy coś w moim skrpcie jest nieporządnie ? > Dużo mniej linijek i bez DIV-ów 1. Atrybuty pisz małymi literami. Zamiast onFocus pisz onfocus. 2. Nie mieszaj kodu, np. JS z HTML. Zrób kod JS w oddzielnym pliku. 3. Sprawdź, jak zadziała Twoje rozwiązanie bez włączonego lub niedostępnego JavaScript-u. 4. div to zwykły element blokowy i równie dobrze zamiast niego może być inny element. Nie ma on nic tu do rzeczy. > Zadaje sobie pytanie tylko dlaczego nie działa mi onBlur ? które nadal > pozostaje bez odpowiedzi ? W funkcji zamien masz na końcu setFocus(); Tę samą funkcję zamien wywołujesz przy zdarzeniu onblur, a która to na końcu ustawia focus. I tak w kółko. Pytanie: po co zmieniasz typ input-a? I co chcesz przez to osiągnąć? -- Peter
Re: Problem z zmianą typu obiektu input
Author: Paweł Piskorz
Date: Wed, 12 Jan 2011 23:13
Date: Wed, 12 Jan 2011 23:13
11 lines
1423 bytes
1423 bytes
W dniu 2011-01-12 14:54, Peter May pisze:
> Pytanie: po co zmieniasz typ input-a? I co chcesz przez to osiągnąć?
Nie chciało się zaglądnąć do pierwszego posta? ;]
Emuluje placeholdera z HTML5 dla pola z hasłem.
--
message[autor="PablO"]::after {
content:"Pozdrawiam";
}
Re: Problem z zmianą typu obiektu input
Author: Peter May
Date: Thu, 13 Jan 2011 00:05
Date: Thu, 13 Jan 2011 00:05
23 lines
2167 bytes
2167 bytes
W dniu 2011-01-13 00:13, Paweł Piskorz pisze: > W dniu 2011-01-12 14:54, Peter May pisze: >> Pytanie: po co zmieniasz typ input-a? I co chcesz przez to osiągnąć? > > Nie chciało się zaglądnąć do pierwszego posta? ;] Zajrzałem. :-) > Emuluje placeholdera z HTML5 dla pola z hasłem. Ale w sposób mało elegancki. A poza tym nadal nie rozumiem po co bawić się w zmiany typu input-a? Dziwolągi i przekombinowane. Emulowanie placeholder-a z html5 jest dość banalne i w gruncie rzeczy sprowadza się tylko do ustawienia dla position relative dla elementu nadrzędnego, <label>-a position absolute i skorygowaniu pozycji <label>-a przy odpowiednim zdarzeniu. Można pójść dalej i zastosować powyższe dopiero po wykryciu czy przeglądarka nie obsługuje natywnie placeholder-a. A nie robić to w sposób, jaki wątkotwórca przedstawił :P Z resztą w artykule ALA jest to opisane ładnie. -- Peter
Re: Problem z zmianą typu obiektu input
Author: Grzegorz Jakóbik
Date: Thu, 13 Jan 2011 16:04
Date: Thu, 13 Jan 2011 16:04
38 lines
3420 bytes
3420 bytes
> 1. Atrybuty pisz małymi literami. Zamiast onFocus pisz onfocus. > 2. Nie mieszaj kodu, np. JS z HTML. Zrób kod JS w oddzielnym pliku. > 3. Sprawdź, jak zadziała Twoje rozwiązanie bez włączonego lub > niedostępnego JavaScript-u. > 4. div to zwykły element blokowy i równie dobrze zamiast niego może być > inny element. Nie ma on nic tu do rzeczy. Zmiana atrybutów na małe litery nie jest tu akurat powodem nie działania tego o co pytam, poza tym bez znaczenia ma czy JS jest w jednym pliku czy w osobnym na razie testuje moje rozwiązanie, więc nie widzę powodu żeby utrudniać ludzom chcącym mi pomoć aby musieli generowac 100 plików >> Zadaje sobie pytanie tylko dlaczego nie działa mi onBlur ? które nadal >> pozostaje bez odpowiedzi ? > > W funkcji zamien masz na końcu setFocus(); Tę samą funkcję zamien > wywołujesz przy zdarzeniu onblur, a która to na końcu ustawia focus. I tak > w kółko. Pytanie: po co zmieniasz typ input-a? I co chcesz przez to > osiągnąć? setfocus ustawiam po to aby po zmianie typu pola z text na password kursor nadal pozostawał tam gdzie trzeba a nie okno traciło swoją aktywność wystarczyło przeczytać sobie posty od początku albo po prostu wkleić kod który zaczyna się od ---cut here--- i koczy się tym samym u go sobie uruchomić. Zmiany na małe litery problemu nie rozwiązują, wycięcie funkcji setFocus(); też niczego nie zmienia w działau onblur, tak więc nie tu lerzy problem. Jeśli masz chęć mi pomoć, zrób to proszę a nie traćmy czas na głupie wywody co i jak jest bardziej elegancko. Ja osobiście uważam że metodę którą mi podałeś owszem działa ale jest jak dal mnie nie elegancka bo gdy robimy w przeglądarce czy to FF czy IE najnowszych wersjach REFLESH okienka przeskakują na ułamek sekundy to mi się jakoś bardzo nie podoba, a wynika to z tego że stosowana jest tam przesunięcie pola które dopiero sktutkuje po załadowaniu całej strony. G.J.
Re: Problem z zmianą typu obiektu input
Author: Paweł Piskorz
Date: Thu, 13 Jan 2011 16:42
Date: Thu, 13 Jan 2011 16:42
22 lines
1745 bytes
1745 bytes
W dniu 2011-01-13 01:05, Peter May pisze:
> A poza tym nadal nie rozumiem po co bawić
> się w zmiany typu input-a?
Żeby było widać tekst a nie *
> Emulowanie
> placeholder-a z html5 jest dość banalne i w gruncie rzeczy sprowadza się
> tylko do ustawienia dla position relative dla elementu nadrzędnego,
> <label>-a position absolute
No chyba że ktoś chce mieć i labela i placeholder ;)
> Z resztą w artykule ALA jest to opisane ładnie.
Dzięki za linka.
--
message[autor="PablO"]::after {
content:"Pozdrawiam";
}
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads