Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] obliczanie z select nie działa w IE
Forum PHP.pl > Forum > Po stronie przeglądarki
harbii
Mam formularz, który liczy wartość pozycji. netto + VAT = brutto
VAT wybieram z pola typu select i niestety w IE nie działa. W FireFoxie jest ok Safari jest ok...
Jak zamienię selekt na text to działa ok.

Co zrobić aby IE brało pod uwagę wybraną opcje z select?
Rafal Filipek
Wydaje mi się, że zaprezentowanie jakiegokolwiek kodu mogłoby nam trochę pomóc. No ale skoro nie ma nic to chyba mogę ci przedstawić taki kod:
Kod
var s = document.getElementById("select");
alert(s.options[s.selectedIndex].value);
harbii
no nie działa chyba, albo źle tego użyłem.

mam taki kod który liczy:
  1. <script type="text/javascript">
  2.  
  3. function licz(aform){
  4. aform.ilosc1.value=aform.ilosc1.value.replace(',','.');
  5. aform.cenan1.value=aform.cenan1.value.replace(',','.');
  6. aform.rabat1.value=aform.rabat1.value.replace(',','.');
  7. aform.wartoscn1.value = zaokraglenie((parseFloat(aform.cenan1.value) - parseFloat(aform.cenan1.value) * parseFloat(aform.rabat1.value)/100) * parseFloat(aform.ilosc1.value))
  8.  
  9. }
  10. function zaokraglenie(wartoscn1) {
  11. wartoscn1 = wartoscn1 * 100;
  12. var wynik1 = Math.round(wartoscn1)/100;
  13. return wynik1;
  14. }
  15. function zaokraglenie(liczba) {
  16. liczba = liczba * 100;
  17. var wynik = String(Math.round(liczba)/100);
  18. return wynik;
  19. }
  20. <script type="text/javascript">
  21.  
  22. function liczv(aform){
  23. if (aform.vat1.value == 'ZW') {
  24. aform.kvat1.value = zaokraglenie(parseFloat(aform.wartoscn1.value) * 0);
  25. }
  26. else {aform.kvat1.value = zaokraglenie(parseFloat(aform.wartoscn1.value) * parseFloat(aform.vat1.value)/100);
  27. }
  28. }
  29. function zaokraglenie(kvat1) {
  30. kvat1 = kvat1 * 100;
  31. var wynik = Math.round(kvat1)/100;
  32. return wynik;
  33. }
  34. <script type="text/javascript">
  35.  
  36. function liczb(aform){
  37.  
  38. aform.wbrutto1.value = zaokraglenie(parseFloat(aform.wartoscn1.value) +
  39.  
  40. parseFloat(aform.kvat1.value));
  41. }
  42. function zaokraglenie(wbrutto1) {
  43. wbrutto1 = wbrutto1 * 100;
  44.  
  45. var wynik = Math.round(wbrutto1)/100;
  46. return wynik;
  47. }


i taki formularzyk:

  1. <input type="hidden" name="ptid" value="<?php echo $ptid ;?>">
  2.  
  3. <input type="text" maxlength="5" name="symbol1" size="4" value="<?php echo $tsymbolntid ;?>" onfocus="licz(xxx); liczv(xxx); liczb(xxx)">
  4. </td><td align="center" class="opisfvmb">
  5. <input type="text" maxlength="3" name="wyr1" size="3" value="" onfocus="licz(xxx); liczv(xxx); liczb(xxx)">
  6. </td><td align="center" class="opisfvmb">
  7. <input type="text" name="nazwa1" size="45" maxlength="36" value="<?php echo $tnazwantid ;?>" onfocus="licz(xxx); liczv(xxx); liczb(xxx)">
  8. </td><td class="opisfvmb" align="center">
  9. <input type="text" name="ilosc1" size="3" class="opisfvm" maxlength="6" onfocus="licz(xxx); liczv(xxx); liczb(xxx)" onKeyUp="licz(xxx); liczv(xxx); liczb(xxx)" value="">
  10. </td><td align="center" class="opisfvmb" >
  11. <input type="text" name="jm1" size="1" value="<?php echo $tjmntid ;?>" maxlength="4" onfocus="licz(xxx); liczv(xxx); liczb(xxx)">
  12. </td><td align="center" class="opisfvmb" >
  13. <input type="text" name="cenan1" size="10" class="opisfvm" maxlength="10" onfocus="licz(xxx); liczv(xxx); liczb(xxx)" onKeyUp="licz(xxx); liczv(xxx); liczb(xxx)" value="">
  14. </td><td align="center" class="opisfvmb">
  15. <input type="text" name="rabat1" size="10" class="opisfvm" maxlength="10" onfocus="licz(xxx); liczv(xxx); liczb(xxx)" onKeyUp="licz(xxx); liczv(xxx); liczb(xxx)" value="">
  16. </td><td align="center" class="opisfvmb">
  17. <input type="text" name="wartoscn1" size="14" class="opisfvm" onfocus="liczv(xxx); liczb(xxx)" readonly="readonly">
  18. </td><td align="center" class="opisfvmb" >
  19. <select name="vat1" size="1" class="opisfvm" onfocus="liczv(xxx); liczb(xxx)">
  20. <? $zapytanievat = "SELECT * FROM vat ";
  21. $wykonajvat = mysql_query($zapytanievat);
  22.  
  23. while($danevat = mysql_fetch_array($wykonajvat))
  24. {
  25. $tdanevatvat = $danevat['vat'];
  26. print '<option>'.$tdanevatvat.'</option>';
  27. }
  28. ?>
  29. </select>
  30. </td><td align="center" class="opisfvmb">
  31. <input type="text" name="kvat1" size="8" class="opisfvm" readonly="readonly">
  32. </td><td align="center" class="opisfvmb" >
  33. <input type="text" name="wbrutto1" size="16" class="opisfvm" readonly="readonly">
Rafal Filipek
1) co to jest to 'xxx' jako argument funkcji ? Ani to string ani zmienna ...
2) gdzie w tym kodzie wykorzystujesz to co ci pokazalem ? widze ze masz 1 select'a i stosujesz na nim 2 funkcje ale zadna z nich nie wykorzystuje mojego kodu.
harbii
1. xxx to nazwa form

  1. <form action="index.php" name="xxx" method="post">


2. no właśnienie nie wiem jak to wykorzystać wstydnis.gif
paziek
Tak się nie odwołuje do formularza, tak przynajmniej uważam. A, że FF/Safari to łykają, to już inna sprawa.

Nie mniej jednak
zamień
liczv(xxx);
na
liczv(this.form);

Powinno pomóc, aczkolwiek możliwe, że błąd masz gdzieś indziej. Powiedz co mówi IE - jakie błędy wywala.
harbii
po tej zmianie to w IE bez zmian

temat nadal aktualny, w IE nie liczy może ktoś ma jeszce jakiś pomysł?
erix
A onchange zamiast onfocus?
harbii
nie pomaga

tak nic nie pokazuje
  1. function liczv(aform){
  2. var s = document.getElementById("select");
  3. alert(s.options[s.selectedIndex].value);
  4. if (aform.vat1.value == 'ZW') {
  5. aform.kvat1.value = zaokraglenie(parseFloat(aform.wartoscn1.value) * 0);
  6. }
  7. else {aform.kvat1.value = zaokraglenie(parseFloat(aform.wartoscn1.value) * parseFloat(aform.vat1.value)/100);
  8. }
  9. }

nawet NaN
kamil4u
Jak Ty to robisz, że masz 3 funkcje "zaokraglenie"? (ta ostatnia wystarczy)

Naucz się debugować, czyli w tym przypadku powstawiaj sobie alerty i sprawdź gdzie się wysypuje błąd, jeszcze wcześniej sprawdź czy FF nie wywala żadnego błędu (konsola JS) smile.gif

Później miło by było gdybyś przeszedł na używanie funkcji nawigacyjnych DOM(czy jak to tam nazwać):
- getElementById
- getElementsByName
- getElementsByTagName

Co prawda i tak powinno działać tak jak to Ty zrobiłeś, ale powyższy sposób jest teraz swego rodzaju (niepisanym) standardem.

PS. Masz mało czytelny kod(HTML głównie)
harbii
ok. czasem sie poprawię z czytelnością ale póki co ma ktoś pomysł dlaczego nie liczy w IE?

ok. co by się inni nie męczyli tak jak ja smile.gif to powiem że wystarczyło dodać value w <option>

widocznie ff bierze sobie jak nie ma value z nazwy a ie nie

no cóż pół roki i rozwiązałem problem party.gif

pozdrawiam
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.