Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ukrywanie bloku DIV, Ukrywanie po wybraniu opcji na rozwijanej liście
anm
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.09.2010

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


Chciałbym prosić o pomoc w prostym skrypcie. Wybranie jednej z opcji na rozwijanej liście ukrywałoby (lub pokazywało) blok <div>.

Potrzebuję zrobić dokładnie coś takiego:
Lista Shoe Size w tym sklepie służy do wybierania rozmiaru buta. Po wybraniu rozmiaru cena automatycznie zmienia się. Cena zawarta jest w bloku
  1. <div class="price-box">...</div>


Chciałbym aby blok ten był ukryty zawsze, gdy nie wybrano żadnego rozmiaru, czyli gdy na liście wybrany jest napis "Coose an Option...". Aby ukryć blok trzeba by mu nadać styl visibility:hidden, lub po prostu nadać mu wcześniej zdefiniowaną klasę "ukryty", która miałaby już ten styl.

Nie znam się na JavaScript, ale wygląda to na prosty skrypt. smile.gif Będę bardzo wdzięczny za wszelką pomoc.
Go to the top of the page
+Quote Post
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


moim zdaniem jeśli już coś chcesz ukrywać to cały blok razem z dodaniem do koszyka... poza tym nie widzę, by cena tam się zmieniała - jeśli by się zmieniała to wystarczyło by wyświetlić tam pusty tekst domyślnie... jako, że nie wszystkie przeglądarki obsługują getElementsByClassName to wziąłem trochu inaczej - ale to mało ważne jak znajdziesz te elementy - wystarczy je znaleźć i podać jako parametr funkcji którą teraz Ci podam... dodaj ten skrypt za formularzem:
Kod
<script type="text/javascript">
(function() {
    var $select = document.getElementById('attribute502'),
    $el = document.getElementById('product-price-135_clone').parentNode.parentNode,
    sprawdz_by_ukryc = function($select, $el){
        if(!$select || !$el) throw new Error('nie zdefiniowany select lub element');
        $select.onchange = function() {
            $el.style.visibility = (isNaN(parseInt(this.value)))?'hidden':'visible';
        }
    };
    $el.style.visibility = 'hidden'; /* domyślnie ukryty blok */
    /* podpięcie listenera pod onchange - można zwykłymi listenerami zamiast na sztywno - nawet wskazane przebudowanie funkcji powyżej */
    sprawdz_by_ukryc($select, $el);
})()
</script>


Ten post edytował zegarek84 21.09.2010, 11:57:04


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

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





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.09.2010

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


Dziękuję, zaraz to przetestuję.

A przykład ze zmienianiem cen można zobaczyć TUTAJ, przedtem pomyliłem link, przepraszam. smile.gif

Wszytko działa pięknie, jeszcze raz wielkie dzięki.

Pisałeś, że jeśli cena by się zmieniała (tak jak w tym przykładzie) to "wystarczyło by wyświetlić tam pusty tekst domyślnie". Pomyślałem sobie, że zamiast tego pustego tekstu, można by wyświetlić "wybierz opcję". Czy mógłbyś pokazać, jak to zrobić?

W tym przykładzie cena jest wyświetlana w dwóch miejscach (różne ID), więc załóżmy, że jest wyświetlana tylko w jednym. Chyba, że byłbyś w stanie pokazać mi, jak dobrać się do boksów z cenami odszukując je po nazwie klasy smile.gif (oba mają takie same).

Pozdrawiam

A jeszcze jedno, jakie przebudowanie funkcji miałeś na myśli, pisząc, że jest wskazane? Jakaś poważna wada?
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


widzę, że jest zaimplementowany framwork Prototype... więc ceny do zmiany wartoci odnajdziesz w ten sposób:
$$('.product-essential .price') - jest to tablica cen składająca się z 2 elementów - więc pierwszy to $$('.product-essential .price')[0]

nie wiem jak masz zmieniane ceny - nie chce mi się szukać skryptu - czy przez DOM czy przez innerHTML - jedno z drugim może nie grać jeśli element jest nadpisywany...

pasuje jeszcze gdy ceny nie będzie ukryć box z zatwierdzeniem zakupu który odszukać można przez:
$$('.product-essential .add-to-cart')[0]

co do przebudowania funkcji miałem na myśli zmianę zdażenia onchange na listenera addEventListener('change', funkcja, false) [na IE to z atachEvent...] - ale skoro jest prototype to z Event.observe


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

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 - 11:04