Tôi đã có hai chức năng JS, một trong đó là thêm tùy chọn vào một hộp chọnLàm cách nào để ngăn đặt lại vị trí cuộn của trang sau khi thao tác 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);
}
}
và phần còn lại được thực hiện một document.getElementById (formId) .appendChild (newHiddenInput) trong một chức năng đơn giản tương tự.
Cả hai đều hoạt động, các thành phần được thêm vào như mong đợi. Tuy nhiên, khi gọi một trong hai trang này, trang sẽ đặt lại vị trí cuộn của nó lên đầu trang trong cả IE6 và FF. Không có postback, đây hoàn toàn là thao tác với khách hàng. Tôi đã đặt breakpoints trong Firebug, và nó xảy ra ngay lập tức sau khi element.appendChild hoặc select.add được thực thi. Tôi biết tôi có thể sử dụng JS để đặt thủ công vị trí cuộn, nhưng tôi không nghĩ rằng nó là cần thiết khi trang không được hiển thị lại.
Tôi không có chuyên gia với JS hoặc DOM, vì vậy tôi có thể thiếu một thứ gì đó, nhưng tôi đã xem here và chạy qua các ví dụ của họ với tùy chọn Thử tùy chọn này và tôi không thể tái tạo sự cố, cho biết codebase mà tôi đang làm là thủ phạm.
Bất kỳ ý tưởng nào tại sao vị trí cuộn đang được đặt lại? jQuery cũng có sẵn cho tôi, nếu nó cung cấp một lựa chọn tốt hơn.
Cảm ơn bạn! Các chức năng này được gọi từ các nút kiểu ". Tôi đã chuyển chúng sang thẻ span và điều đó đã khắc phục được sự cố. –
Đó không phải là (nhất thiết) là giải pháp, nhưng có thể trong trường hợp của bạn. Để tham khảo trong tương lai, khi sử dụng một thẻ neo, bạn thường muốn có một href hợp lệ trong nó, nhưng có thể không muốn thực sự có nó đi bất cứ nơi nào như bạn đang làm trống trước các hành vi với javascript. Đó là khi bạn cần sử dụng "return: false;" –
Đúng. Đó là những gì đã làm cho tôi. Bây giờ tôi cảm thấy ngớ ngẩn. – dooleyo