2012-02-02 30 views
8

Tôi có một thanh trượt jQuery UI:jQuery UI Slider - Giá trị trở về từ 'trượt' sự kiện trên phiên bản là khác nhau từ 'thay đổi' giá trị

$('div.slider').slider({ 
    range: true, 
    step: 250, 
    min: 1000, 
    max: 500000, 
    values: [1000,500000], 
    change: function(event, ui){ 
     console.log($(this).slider('values', 0)+','+$(this).slider('values', 1)); 
    }, 
    slide: function(event, ui){ 
     console.log($(this).slider('values', 0)+','+$(this).slider('values', 1)); 
    } 
}); 

Đối với một số lý do kỳ quặc, khi phóng thanh trượt (mouseup) các giá trị thay đổi một chút so với những gì nó được. Sự kiện slide đang trả về một thứ gì đó khác với sự kiện thay đổi. Bất cứ ai có bất cứ ý tưởng gì có thể gây ra điều này và làm thế nào tôi có thể giải quyết nó?

Tôi sẽ có một hoạt động khá mạnh trong gọi lại cho sự kiện thay đổi (có nghĩa là tôi không thể sử dụng sldie), nhưng cũng cần hiển thị giá trị của thanh trượt trực tiếp, vì vậy tôi không thể sử dụng chỉ một hay khác.

Dưới đây là một fiddle với kỳ quặc này trong hành động: http://jsfiddle.net/5W6Zh/

Cảm ơn trước

+1

Dường như khi bạn lấy/trượt thanh trượt, phải mất giá trị từ trung tâm của các nút, nhưng khi bạn bỏ đi, nó lấy giá trị từ cạnh trái. Ngoài ra, chỉ cần nhấp vào ca khúc không bao giờ tạo hiệu ứng này, vì vậy Im nghiêng nghĩ rằng mã phía sau nút đang sử dụng các điểm tham chiếu khác nhau để kéo/thả – sottenad

Trả lời

12

chúng tôi chạy vào tối nay (và đêm qua, và trong vài tháng qua). Những gì chúng tôi đã làm để sửa chữa nó đã được sử dụng ui.value và ui.values ​​[0] thay vì $ ("# slider"). Slider ('values', 0).

Sử dụng này:

change: function(event, ui) { 
    $('.values').text(ui.values[0] + ',' + ui.values[1]); 
} 

Thay vì:

change: function(event, ui) { 
    $('.values').text($(this).slider('values', 0) + ',' + $(this).slider('values', 1)); 
} 

tôi chia hai jsfiddle của bạn và làm cho nó hoạt động: http://jsfiddle.net/danhixon/9JdhU/1/

Thành thật mà nói tôi không nghĩ rằng tôi sẽ tìm thấy giải pháp mà không có câu hỏi của bạn và jsfiddle - Tôi tiếp tục so sánh nó với bản demo jquery-ui cho đến khi tôi tìm thấy sự khác biệt này.

0

phút của bạn, giá trị tối đa và bước nhìn một chút lạ, nhưng tôi đoán bạn chỉ bị họ lẫn lộn.

Tôi thấy rằng thanh trượt không hoạt động quá tốt với các bước nhỏ hơn nhiều so với 1, vì vậy tôi đã thay đổi để chỉ sử dụng số nguyên và chia sau đó. Chưa bao giờ có bất kỳ vấn đề gì kể từ đó.

+1

Tôi đã thay đổi thành các giá trị ở trên và rất tiếc là tôi vẫn nhận được sự kỳ quặc này . :/ – wyqydsyq

2

Sử dụng ui.value trong trình xử lý trang trình bày để có được giá trị chính xác hơn.

13

Tôi đã tìm được giải pháp! LUÔN làm điều này trên một sự kiện trượt:

$(this).slider('value', ui.value); 

Và bạn tốt để đi

+1

Vậy đó! Tôi yêu bạn, anh bạn! –

+0

Thanh trượt của tôi chỉ trả lại '[đối tượng]'. – nipponese

+2

hoàn hảo! ive đã đập đầu của tôi trên bàn của tôi ngày hôm nay vì điều này .. tôi biết một năm muộn của nó, nhưng @ nipponese, bạn đang nhận được '[đối tượng]' bởi vì nó là một thanh trượt phạm vi, hãy thử: '$ (this) .slider ('values', ui.values ​​[0]); ' – kingkode

Các vấn đề liên quan