Witam,
Mam problem, ponieważ mam kalkulator, który oblicza wycenę dla produktów. Ogólnie jest tam kilka opcji wyboru oraz kilka obliczeń. Chciałbym zrobić tak, że po lewej stronie mam opcję wyboru towaru i tak dalej wraz z przyciskiem "Oblicz", a po prawej aby po kliknięciu przycisku pojawiał się wynik obliczeń. Zrobiłem to tak, że wyniki obliczeń wraz z funkcjami które to obliczają wpakowałem do jednego diva, nadałem mu w CSSie visibility:hidden i zrobiłem funkcję która odkrywa diva, czyli zmienia jego vissibility na visible. Na przycisku w onlick podpiąłem tę funkcję i jest ok, ale wyniki pojawiają mi się (a raczej migną) na moment i znikają. Macie może jakieś pomysły jak sobie z tym poradzić ?
vonski
29.03.2014, 22:40:07
Trochę ciężko, biorąc pod uwagę, że nie pokazałeś nawet linijki kodu.
Ale zgaduję, że strona w rzeczywistości się przeładowuje, dlatego wygląda to jakby wyniki tylko mignęły. Spróbuj zwrócić FALSE w funkcji, którą pokazujesz owego diva, a jak to nie pomoże, to pokaż jakiś kod, to wtedy będzie wiadomo z czym mamy do czynienia.
Ok, więc skrypt zmieniający widoczność diva wygląda następująco:
<script type="text/javascript" language="JavaScript">
function HideContent(d)
{
document.getElementById(d).style.visibility = "hidden";
}
function ShowContent(d)
{
document.getElementById(d).style.visibility = "visible";
}
</script>
Natomiast podpięcie pod przycisk wysyłania następująco:
<input type="submit" value="Oblicz" onclick="java script:ShowContent('box');" />
Div "box" to są wyniki obliczeń.
vonski
29.03.2014, 23:52:02
Input typu "submit" domyślnie wysyła formularz, więc tak jak napisałem w pierwszym poście, strona się przeładowuje i dlatego widzisz tylko to "mignięcie". Czy próbowałeś dodać: return false; w funkcji showContent() ?
Właśnie teraz próbowałem i nic :/. Masz rację z tym przeładowywaniem, ponieważ jak dam tę samą funkcję na przykład na jakiejś grafice to działa bez problemu. Chciałbym tylko to jakoś podpiąć pod ten przycisk.
alex19
30.03.2014, 00:39:05
Jak chcesz mieć to jako przycisk, ale nie wysyłający formularza, to skorzystaj z
vonski
30.03.2014, 00:39:17
W onclick daj tak:
<input type="submit" value="Oblicz" onclick="return ShowContent('box');" />
no i w showContent() oczywiście na końcu: return false;
Ok, teraz wyświetla diva z wynikami, ale nie oblicza wyników. Masz może na to jakiś sposób? Potrzebujesz może fragment kodu?
alex19
30.03.2014, 00:57:50
Cały twój problem polega na tym że JS tylko ukrywa/odkrywa DIV, a obliczeń zapewne dokonuje PHP, które musi przeładować stronę.
Zamiast tego JS mógłbyś przekazywać sobie parametr podczas wysyłania tego formularza(musisz go wysłać żeby policzyć), że chcesz widzieć obliczenia i że DIV ma tym razem być odkryty.
Ok, a jak to mniej więcej można zrobić? Mógłbyś podać jakiś kod?
alex19
30.03.2014, 15:30:15
Tu trzeba wymyślić coś sensownego

Możesz dopisać parametr name do przycisku obliczania i podczas przetwarzania formularza sprawdzać czy właśnie ten przycisk został wciśnięty i dokonywać obliczeń.
In HTML:
<input type="submit" id="btnSubmit" name="btnSubmit" value="Save Changes" />
<input type="submit" id="btnDelete" name="btnDelete" value="Delete" />
In PHP:
if (isset($_POST["btnSubmit"])){ // "Save Changes" clicked
} else if (isset($_POST["btnDelete"])){ // "Delete" clicked
}
Ok, co prawda uzyskałem to co chciałem, ale w nieco inny sposób. Otóż jak chciałem podpiąć wywoływanie funkcji showContent pod ten isset($_POST["btnSubmit"]) to wywalało mi błąd. Zrobiłem to w prostszy sposób, ale troszkę bardziej łopatologiczny

. Zrezygnowałem z tej funkcji showContent i do każdego wyniku dałem ten warunek isset($_POST["btnSubmit"]) i ostatecznie uzyskałem to co chciałem. Także wielkie dzięki za pomoc i podsunięcie tego rozwiązania.
alex19
30.03.2014, 20:43:02
Dokładnie tak miałeś zrobić. JavaScript nie jest tu potrzebny
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.