Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z FireFoxem i disabled="true", po odswiezeniu strony
phpion
post
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Witam
Mam nastepujacy problem.
Na stronie mam formularz:
  1. <form action="" onsubmit="return false;">
  2. <input type="text" id="mailSubject" style="width: 500px;" /><br />
  3. <textarea id="mailBody" style="width: 500px; height: 200px;"></textarea><br />
  4. <input id="sendButton" type="button" value="Wyslij" onclick="java script:send();" disabled="true" />
  5. </form>

Mam tez funkcje, ktora blokuje oraz obdlokowuje te elementy:
  1. function changeFormState(mode)
  2. {
  3. document.getElementById('mailSubject').disabled = mode;
  4. document.getElementById('mailBody').disabled = mode;
  5. document.getElementById('sendButton').disabled = mode;
  6. }

Na dole dla testow zrobilem 2 przyciski do blokowania i odblokowania:
  1. <input type="button" value="Blokuj" onclick="java script:changeFormState(true);" />
  2. <input type="button" value="Odblokuj" onclick="java script:changeFormState(false);" />

No i wszystko ladnie smiga. Ale! Gdy formularz jest zablokowany i odswieze strone to pole mailSubject (to o type="text") nadal zostaje zablokowane. Textarea oraz button na nowo sa dostepne (i tak powinno byc). Ponadto gdy w inputa oraz textarea wpisze cokolwiek i odswieze strone to te elementy zawieraja wczesniej wpisane znaki.
Jak rozwiazac te problemy, a w szczegolnosci ten pierwszy? Domyslam sie, ze mozna poprzez ustawienia przegladarki (jednak usuniecie pamieci podrecznej nie przynioslo efektu) ale wolalbym nie zmuszac potencjalnego uzytkownika do tego czynu winksmiley.jpg
Dodam jeszcze, ze problem wystepuje tylko na FireFoxie (Opera oraz Konqueror czyszcza formularz z elementow oraz ustawiaja je jako aktywne).
Jakies pomysly?
Go to the top of the page
+Quote Post
wipo
post
Post #2





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

Ostrzeżenie: (0%)
-----


A spróbuj między java a script nie robić przerwy (bo wydaje mi się że to jest błąd)
Tak na marginesie to nie musisz jej w sumie dawać - można wyrzucić `java script:`

Ten post edytował wipo 2.10.2006, 08:41:06


--------------------
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Przerwe dodaje to forum. W moim kodzie jej nie ma.
Go to the top of the page
+Quote Post
siemakuba
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


Witam,
1. w wywolaniach zdarzeń podawanych jako atrybuty (onclik, onsubmit) nie używa się java script:. Jest to pseudo protokół i trzeba go podawać tylko jeżeli chcesz przypisać wywołanie danej funkji jako href dla odnośnika: <a href="java script:whatever()">

2. w FF faktycznie dzieje się tak, że kiedy wpiszesz wartości w formularzu i odświeżysz stronę te wartości pozostają wpisane. Jest to trochę dziwne, aczkolwiek nigdy nie stwarzało mi super-problemu. Możesz sobie napisać funkcję JS która ustawi / wyczyści co trzeba w formularzu i odpalać ją przy zdarzeniu onload dla body.

3. możesz spróbować użyć atrybutu autocomplete="off" dla inputów. Dla type="text" zadziała, pole będzie puste po odświeżeniu, ale pozbawisz się też podpowiadania poprzednio wpisanych wartości (o ile ma to dla ciebie znaczenie). Sprawdź też, czy dodanie tego parametru pomoże przy input type="checkbox" np.

pozdr.
Go to the top of the page
+Quote Post
mariuszn3
post
Post #5





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

Ostrzeżenie: (0%)
-----


Takie jest zachowanie firefoxa, faktycznie nieco irytujące.. możesz je ominąć na trzy sposoby.. o pierwszym wspomina siema kuba czyli atrybut autocomplete z wartością 'off', jedyny problem w tym przypadku, to że atrybut nie należy do specyfikacji HTML'a.
Drugi sposób, to nadawanie za każdym razem innych wartości dla nazw kontrolek (atrybut 'name').. przykłądowo poprzez doczepianie jakiegoś losowo wygenerowanego ciągu znaków do nazwy.. ale wiadomo jakie są minusy tego rozwiązania.
Trzeci sposób, to resetowanie kontrolek poprzez javascript po załadowaniu strony.
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ok, dzieki za odpowiedzi. Jednak te wczesniej wpisane dane to nie taki problem. Wazniejsze jest dla mnie rozwiazanie kwestii zablokowania pola input (a wlasciwie jego odblokowania po przeladowaniu). Jak to rozwiazac? Dodam ze dodanie atrybutu disabled="false" w inpucie nie przynosi rezultatu :/
Go to the top of the page
+Quote Post
siemakuba
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


Cytat
Dodam ze dodanie atrybutu disabled="false" w inpucie nie przynosi rezultatu
Oczywiście, że nie przynosi :) nie powinno przynosić. Atrybut disabled jest atrybutem typu boolean - jeżeli jest, jego wartość wynosi true a jeżeli go nie ma - false.
Dopiero XHTML wymaga konstrukcji disabled="disabled" -- tylko w takiej formie jest to prawidłowy zapis! W HTML wystarczy napisać <input disabled> (podobnie jest z checked, selected) Nie ma czegoś takiego jak disabled="false" czy diabled="true" - w taki sposób możesz modyfikować te wartości tylko przez JS.

Nie zauważyłem tego wcześniej, a to jest banalne :) Jeżeli nie chcesz mieć elementu formularza zablokowanego nie możesz dać mu atrybutu disabled w żadnej postaci albo wyłączyć ten atrybut via JS po załadowaniu strony.

pozdr.
Go to the top of the page
+Quote Post
mariuszn3
post
Post #8





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

Ostrzeżenie: (0%)
-----


@phpion.com
Samo dodanie atrybutu czy wartości do value nic nie zmieni..
Czytałeś w ogóle co napisaliśmy?
Tam masz kilka gotowych rozwiązań podanych, nie będę drugi raz tego samego pisał
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:58