2013-11-27 6 views
7

Na mojej witrynie magento, dostaję dziwne zachowanie w onepagecheckout, które chciałbym naprawić. Zasadniczo, w kroku 2, po wprowadzeniu wszystkich wymaganych danych i kliknięciu przycisku Kontynuuj, strona automatycznie przewija się w dół na dół ekranu, więc zamiast widzieć opcję wysyłki, widzisz stopkę i musisz przewinąć w górę, aby wybrać Wysyłka. Tak więc moje pytanie brzmi: jak mogę zachować formularze w onepagecheckout "skoncentrowane", tak aby ekran pozostał na nim po kliknięciu przycisku Dalej/Dalej. Próbowałem zmiany funkcji shipping.save() na zdarzenie onclick do czegoś jak:Jedna strona Zamówienie przewijanie do dołu ekranu na następnej

function test() { 
      shipping.save(); 
      document.getElementById('checkoutSteps').scrollIntoView(); 
} 

Ale to wyraźnie nie działa. Jak więc ustawić stronę, aby pozostała na onepagecheckout po następnym kliknięciu?

Niestety zapomniałem dodać, przycisk ma już istniejące wydarzenie kliknięcia. Zasadniczo, przycisk wygląda tak:

<button type="button" class="button" title="<?php echo $this->__('Continue') ?>" onclick="shipping.save()"><span><span><?php echo $this->__('Continue') ?></span></span></button> 

Nie jestem pewien, czy to sprawy, ale gdy próbuję dodać drugą funkcję onclick (onclick = "shipping.save(); testFunction();"), druga funkcja jest automatycznie usuwana.

Odpowiedz

15

Napotkałem ten sam problem. W swojej kasie/onepage.phtml dodać ten kod:

checkout.gotoSection = function (section, reloadProgressBlock) { 
      Checkout.prototype.gotoSection.call(this, section, reloadProgressBlock); 
      $('opc-' + section).scrollTo(); 
     }; 

poniżej

var checkout = new Checkout(....); 

nadzieję, że ta pomoc.

+1

Działa bezbłędnie w CE 1.9.1 z pół milionowym dostosowaniem. –

+0

@Willaim Tran: Mam ten sam problem i wypróbowałem Twoje rozwiązanie. Właściwie działa tylko w połowie. Oznacza to, że pomaga pokazać połowę bloku metody wysyłki i nie jest kompletny od miejsca, w którym zaczyna się blok metody wysyłkowej. Masz pomysł? –

+1

@Willaim Tran: Hej, próbowałem trochę więcej na temat twojego rozwiązania i to działało dobrze dla mnie. Oto co dodałem więcej z rozwiązania: checkout.gotoSection = function (Sekcji reloadProgressBlock) { Checkout.prototype.gotoSection.call (ta sekcja, reloadProgressBlock); jQuery ('html, body'). Animate ({ scrollTop: jQuery ('# opc -' + sekcja) .offset().top - 75 }, 500); }; Pomaga mi to uzyskać blok w miejscu. –

0
$("#button").click(function() { 
    $('html, body').animate({ 
     scrollTop: $("#elementtoScrollToID").offset().top 
    }, 2000); 
}); 
+0

dziękuję, ale to nie zadziałało. Ponadto, za pomocą funkcji klikania jquery wyłączono funkcję onclick przycisku, co również jest ważne. – user1597438

0

Oprócz Williams answer:

Większość niestandardowe szablony nie „przepisać” base/default/template/checkout/onepage.phtml więc byłoby niektóre napowietrznych skopiować ten plik do szablonu tylko dodać to ...

nadal można używać to z dodaniem nowego pliku szablonu:

Dla szablonów układ local.xml dodać to:

<checkout_onepage_index> 
    <reference name="before_body_end"> 
     <block type="core/template" name="checkout.scroll" as="checkout.scroll"> 
      <action method="setTemplate"> 
       <template>checkout/onepage/scroll.phtml</template> 
      </action> 
     </block> 
    </reference> 
</checkout_onepage_index> 

Tworzenie .../template/checkout/onepage/scroll.phtml z tej treści:

<script type="text/javascript"> 
//<![CDATA[ 
    document.observe("dom:loaded", function() { 
     if (typeof checkout !== 'undefined') { 
      checkout.gotoSection = function (section, reloadProgressBlock) { 
       Checkout.prototype.gotoSection.call(this, section, reloadProgressBlock); 
       $('opc-' + section).scrollTo(); 
      }; 
     } 
    }); 
//]]> 
</script> 

sam wynik, tylko bez edycji plików szablonów bazowej.