Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z FireFoxem i disabled="true"
Forum PHP.pl > Forum > Po stronie przeglądarki
phpion
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?
wipo
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:`
phpion
Przerwe dodaje to forum. W moim kodzie jej nie ma.
siemakuba
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.
mariuszn3
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.
phpion
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 :/
siemakuba
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.
mariuszn3
@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ł
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.