selectToUISlider: проблема с перекрытием правого слайдера - PullRequest
0 голосов
/ 27 апреля 2011

Если вы идете сюда: http://www.filamentgroup.com/lab/update_jquery_ui_slider_from_a_select_element_now_with_aria_support//

Затем нажмите и перетащите второй ползунок поверх первого, отпустите, а затем попробуйте сдвинуть вторую ручку назад вправо, он не позволит вам. Это будет идти только налево. Я знаю, что это проблема библиотеки слайдеров пользовательского интерфейса jQuery, но я хотел бы узнать, нашел ли кто-нибудь хороший способ обойти эту проблему, используя selectToUISlider.

Мне вообще не нужен первый дескриптор, это фиксированное значение (я только что сделал отображение: ни одного на первом).

Любая помощь будет принята с благодарностью!

1010 * Роб *

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

Следуя примеру DarthJDG, я посмотрел исходный код и исправил ошибку другим способом.В результате правый ползунок будет иметь приоритет при перемещении вправо, а левый ползунок - влево.


Эта часть jquery.ui.slider.js

        var thisDistance = Math.abs( normValue - self.values(i) );

замените на это:

        var thisDistance = Math.abs( normValue - (self.values(i) + i) );

и удалите

    if( o.range === true && this.values(1) === o.min ) {
        index += 1;
        closestHandle = $( this.handles[index] );
    }

Или в сокращенной версии эту часть:

var l=Math.abs(c-j.values(k));

замените на это:

var l=Math.abs(c-(j.values(k)+k));

и удалите это:

if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}

Имена переменных могут отличаться в вашей версии минимизированной библиотеки jquery, но точку привязки можно найти с помощью этого поискового запроса в файле:

.range===true&&this.

Надеюсь, это поможет.

1 голос
/ 28 апреля 2011

Я быстро взглянул на источник, вы можете взломать код слайдера пользовательского интерфейса jQuery для ваших целей.Если вы загружаете jQuery UI 1.8.12, посмотрите строку 281 в ./development-bundle/ui/jquery.ui.slider.js:

// workaround for bug #3736 (if both handles of a range are at 0,
// the first is always used as the one with least distance,
// and moving it is obviously prevented by preventing negative ranges)
if( o.range === true && this.values(1) === o.min ) {
   index += 1;
   closestHandle = $( this.handles[index] );
}

Исправление ошибки - это хороший совет, куда должны идти изменения, измените ваше состояние на следующее:

if( o.range === true && index == 0 ) {

Это гарантирует, что если это ползунок диапазона, вы всегда перетаскиваете второй, независимо от того, что вы делаете.Вы можете использовать свой код, загрузив пользовательскую минимизированную сборку jQuery UI без компонента слайдера, затем добавить взломанный вручную или вы можете взломать минимизированный код.

Искать:

if(a.range===true&&this.values(1)===a.min)

Изменить на:

if(a.range===true&&g==0)

Если вы не хотите потерять оригинальный слайдер (так что вы можете использовать его в другом месте на вашемстраницы), просто переименуйте это взломанное расширение во что-то другое и включите его отдельно.

Было бы неплохо исправить ошибку перекрытия и добавить опцию в компонент слайдера, чтобы сделать одну из дескрипторов фиксированной, но яБоюсь, что это выходит за рамки этого ответа на данный момент.:)

...