Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: javascript sprawdzanie wyboru pola <SELECT> i IE
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
mpps
witam,
może ktoś z Was mi powie, dlaczego to poniżej działa w Operze a w IE nie?

  1. if(document.formzgl.prodagd.value=='' || document.formzgl.prodagd.value=='----------' || document.formzgl.prodagd.value=='--| naprawa gwarancyjna' || document.formzgl.prodagd.value=='--| naprawa pogwarancyjna'){
  2. alert('Proszę wybrać producenta AGD.');
  3. document.formzgl.prodagd.focus();
  4. return false;
  5. }


instrukcja ma zadanie sprawdzać, co zostało wybrane w polu <SELECT>.
jeśli któryś z wpisów, to ma wyrzucać alert.
czy spowodowane to jest złą składnią czy tym, że IE obsługuje JS "na swój sposób"? mad.gif

pozdrawiam
marcin
wipo
Spróbuj pozamykać warunku IF w oddzielne nawiasy. Może to pomoże.
Tak pozatym to troche kiepska składnia (FF nie wyrzuca Ci ostrzeżeń - to znaczy Warningów)?

moim znamien powinieneś dać
if ((document.forms['formzgl'].prodagd.value=='coś')||(document.forms['formzgl'].prodagd.value=='coś')){
//cos tam
}
mpps
Probowałem też w ten sposób (zamykając IF-y w osobne nawiasy) - dla Opery jest to bez różnicy.
Wiem, że Opera mocno wspomaga niedokształconych w pisaniu skryptów i przymyka Oko na drobne błędy... winksmiley.jpg
Nawet, jeśli włączę w Operze opcję otwierania konsoli w momencie wystąpienia błędu w JS, to nic mi nie wyrzuca, więc (teoretycznie) ze skryptem jest wszystko w porządku...
Nie wiem, szczerze mówiąc, jaka powinna być prawidłowa składnia.
Spotkałem się właśnie z taką składnią.
Co do zastosowania
  1. forms['formzgl']

, to dla Opery też to nie robi różnicy...
Nawet, jeśli zostawię jeden warunek:
  1. if(document.formzgl.prodagd.value=='')

to w IE nie działa.
Czyściłem oczywiście pamięć podręczną przeglądarki po każdej zmianie wprowadzanej w pliku ze skryptem, żeby nie było, że ładuje stary skrypt winksmiley.jpg

Dzięki za poradę!
Może masz (inni oczywiście też winksmiley.jpg ) jeszcze jakieś pomysły, bo mi się wyczerpały...

pozdrawiam
marcin
Zajec
W pełni poprawna składnia to:
Kod
document.forms['formzgl'].elements['prodagd'].value
chociaż to nie rozwiąże problemu. Błąd musi chybależeć gdzieś indziej.

Próbowałeś przed linijką z if() zrobić coś takiego:
Kod
alert(document.forms['formzgl'].elements['prodagd'].value);
questionmark.gif Dostajesz w IE alert z wartością pola formularza?

Jak coś, to podaj kod HTML formularza oraz sposób wywołania funkcji i jej pełny kod.
wipo
a napewno dobre wartosci badasz z pola select?

spróbuj może
Kod
alert(document.forms['formzgl'].elements['prodagd'].text);
mpps
@wipo
  1. alert(document.forms['formzgl'].elements['prodagd'].text);

wyrzuca alert undefined.

@Zajec
  1. alert(document.forms['formzgl'].elements['prodagd'].value);

wyrzuca pusty alert w IE, i alert z prawidłową wartością w Operze... mad.gif

mój zapis
  1. alert(document.formzgl.prodagd.value);

działa tak samo jak Twój, a więc chyba można też w ten sposób pisać guitar.gif
ale my nie o tym...

różnica jest tylko taka, że IE nieprawidłowo przepuszcza dalej, natomoast Opera prawidłowo zatrzymuje wykonywanie skryptu na tym polu (po wyrzuceniu alertu ustawiam na tym polu fokus).

podaję kod formularza:
  1. <SELECT NAME="prodagd">
  2. <OPTION>----------</OPTION>

i podpięty skrypt:
  1. alert(document.formzgl.prodagd.value);
  2. if(document.formzgl.prodagd.value=='----------'){
  3. alert('Proszę wybrać producenta AGD.');
  4. document.formzgl.prodagd.focus();
  5. return false;
  6. }
wipo
Zamień document.....value na text albo daj w polu
<option value="jakas wartosc"> text </option>
i wtedy badaj value
text podaje Ci opis pola a value jego wartość
mpps
@wipo jesteś geniuszem! biggrin.gif
podsunąłeś mi pomysł, który okazał się kluczem...

powinno być:
  1. <SELECT NAME="prodagd">
  2. <OPTION value="----------">----------</OPTION>

i sprawdzenie:
  1. if(document.formzgl.prodagd.value=='----------'){
  2. alert('Proszę wybrać producenta AGD.');
  3. document.formzgl.prodagd.focus();
  4. return false;
  5. }


a co było błędem?
sprawdzałem value, którego nie określiłem w option (w ogóle go nie dałem) party.gif

a tak na marginesie, to chyba powinno być odwrotnie:

Cytat(wipo @ 1.10.2006, 09:17:21 ) *
[..]
text podaje Ci opis pola a value jego wartość

a nie tak?
text podaje Ci wartość pola a value jego opis
wipo
Nie do końca
Kod
<option value="wartość"> Opis </option>
            ^^^^^^    ^^^^^^
              value          text

Chyba będzie to czytalne
mpps
withstupidsmiley.gif
oczywiście masz rację...
przecież value to inaczej wartość...
Zajec
Sprawdzę to zachowanie Opery, jeśli faktycznie dzieje się tak w dokumencie strict to zgłoszę jako bug.

A gdyby ktoś chciał sprawdzać text, to należy użyć konstrukcji

.elements['pole'].innerText
mpps
no właśnie...
skąd opera wiedziała, jaki był wybór, jeśli nie miała na podstawie czego sprawdzać?!
tzn. sprawdzałem value, a przecież nie była ona określona dla <option>, bo jej w ogóle nie wstawiłem?
brała pod uwagę text?

ale rokendrol... blink.gif
Zajec
Cytat(mpps @ 1.10.2006, 13:58:22 ) *
no właśnie...
skąd opera wiedziała, jaki był wybór, jeśli nie miała na podstawie czego sprawdzać?!
tzn. sprawdzałem value, a przecież nie była ona określona dla <option>, bo jej w ogóle nie wstawiłem?
brała pod uwagę text?

ale rokendrol... blink.gif
Tak właśnie robiła. Niestety to są efekty prób bycia kompatybilnym z IE. Czasami aż przerasta IE.
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.