2009-11-09 16 views
7

Mam dwie funkcje JS, jeden, który jest dodanie opcji do zaznaczaniaJak zapobiec resetowaniu pozycji przewijania strony po manipulacji DOM?

function addOption(selectId, text, value) { 
    var selectbox = document.getElementById(selectId); 
    var optNew = document.createElement('option'); 
    optNew.text = text; 
    optNew.value = value; 
    try { 
     selectbox.add(optNew, null); //page position resets after this 
    } 
    catch(ex) { 
     selectbox.add(optNew); 
    }  
} 

i innym, że robi document.getElementById (formId) .appendChild (newHiddenInput) w podobnie prosty funkcji.

Oboje działają, elementy są dodawane zgodnie z oczekiwaniami. Jednak po wywołaniu któregokolwiek z nich, strona resetuje pozycję przewijania na górę strony zarówno w IE6, jak i FF. Nie ma żadnego odświeżenia, jest to manipulacja wyłącznie dla klienta. Ustawiłem punkty przerwania w Firebug i występuje natychmiast po wykonaniu elementu. AppendChild lub select.add. Wiem, że mogę użyć JS do ręcznego ustawienia pozycji przewijania, ale nie sądziłem, że jest to konieczne, gdy strona nie jest ponownie renderowana.

nie jestem ekspertem z JS i DOM, więc może bardzo dobrze być czegoś brakuje, ale szukałem here i biegł przez ich przykładów z opcji Wypróbuj go tutaj i nie mogę odtworzyć problem, wskazanie kodu, z którym pracuję, jest sprawcą.

Jakieś pomysły, dlaczego pozycja przewijania jest resetowana? jQuery jest również dostępny dla mnie, jeśli zapewnia lepszą alternatywę.

Odpowiedz

9

Jeśli funkcje są wywoływane z linkiem może mieć wewnętrzną kotwicy w linku:

http://www.website.com/page.html# 

To powoduje wspomnianą zachowanie. Domyślnym zachowaniem jest to, że jeśli kotwica nie istnieje, pozycja przewijania strony przeskoczy do góry (scrollTop = 0).

Jeśli tak się stanie przy każdym wywołaniu funkcji, niezależnie od źródła, można to skreślić z listy.

4

Co to jest aktywacja wydarzenia?

Jeśli jest to kotwica, a następnie kliknięcie, musisz "zwrócić fałsz;" po wywołaniu twojego kodu jQuery/Ajax/jScript.

Jeśli jest to przycisk, być może trzeba zrobić to samo.

Miałem ten numer wczoraj i to była rezolucja.

Tak <a href="#" onclick="DoStuff(); return false;">My link</a>

Powiązane problemy