Tôi đang làm việc để có danh sách chọn nhiều nơi bạn có thể chọn các mục và sau đó nhấp vào nút "Lên" hoặc "Xuống" để cho phép bạn sắp xếp lại các mục đó trong danh sách.Tại sao javascript này chạy quá chậm trong IE khi tất cả những gì nó làm là sửa đổi một danh sách lựa chọn?
Tôi đã có một khép kín ví dụ đơn giản:
<html>
<head>
<title>Example</title>
<script src="https://www.google.com/jsapi"></script>
<script>
google.load('jquery', '1.4.1');
</script>
</head>
<body>
<select id="selectedDataPoints" multiple="multiple">
<option>Pig</option>
<option>Duck</option>
<option>Dog</option>
<option>Zebra</option>
<option>Snake</option>
<option>Giraffe</option>
<option>Cow</option>
</select>
<input type="button" id="btnReorderUp" value="Up" />
<input type="button" id="btnReorderDown" value="Down" />
</body>
</html>
<script type="text/javascript">
var DataPointSelector = (function() {
var $selectedList = $('#selectedDataPoints');
$('#btnReorderUp').click(function(e) {
moveUp();
e.preventDefault();
});
$('#btnReorderDown').click(function(e) {
moveDown();
e.preventDefault();
});
function moveUp() {
var select = $selectedList[0];
for (var i = 1, n = select.options.length; i < n; i++)
if (select.options[i].selected && !select.options[i - 1].selected)
select.insertBefore(select.options[i], select.options[i - 1]);
}
function moveDown() {
var select = $selectedList[0];
for (var i = select.options.length - 1; i > 0; i--)
if (select.options[i].selected && !select.options[i + 1].selected)
select.insertBefore(select.options[i + 1], select.options[i]);
}
}());
</script>
Tuy nhiên, nút Lên/Xuống mất nghĩa là 3-8 giây để có hiệu lực trong IE7/8. Nhấp chuột đầu tiên đôi khi sẽ nhanh nhưng sau đó phải mất một thời gian rất dài để danh sách lựa chọn cập nhật với các vị trí mới (đặc biệt nếu bạn có một vài mục được chọn).
Sự cố này không có trong Chrome/FF. Tôi sẽ không nghĩ rằng sắp xếp lại đơn giản này sẽ rất chuyên sâu!
Có ai có bất kỳ thông tin nào có thể được sử dụng để giúp tôi tăng tốc các hàm moveUp/moveDown không ?!
Tôi đã rót qua mã đó và sẽ mất nhiều thời gian. Bạn có biết nếu đó là giới hạn tài nguyên hệ thống hay cái gì khác? –
Bây giờ, điều này sẽ gây sốc cho bạn, nhưng hiệu suất JavaScript của IE chậm/kém. – Powerlord
dòng dưới cùng: IE chậm. Thành thật mà nói tôi sẽ để nó ở đó; nó làm cho một động lực tốt cho mọi người để nâng cấp nếu họ có bằng chứng rõ ràng rằng trình duyệt của họ hút. (ở mức độ nghiêm túc, tôi biết đó có thể không phải là một lựa chọn, và bạn đã được đưa ra giải pháp làm việc, nhưng trong trường hợp đó là ý kiến của tôi thì chỉ để người dùng IE bị ảnh hưởng) – Spudley