#jquery #jquery-ui #jquery-plugins #jquery-selectors
#jquery #jquery-пользовательский интерфейс #jquery-плагины #jquery-селекторы
Вопрос:
Если вы перейдете сюда: http://www.filamentgroup.com/lab/update_jquery_ui_slider_from_a_select_element_now_with_aria_support//
Затем щелкните и перетащите второй ползунок поверх первого, отпустите, а затем попытайтесь сдвинуть второй дескриптор обратно вправо, он вам не позволит. Он будет двигаться только влево. Я знаю, что это проблема с библиотекой слайдеров jQuery ui, но я хотел бы знать, нашел ли кто-нибудь хорошее решение этой проблемы с помощью selectToUISlider.
Мне вообще не нужен первый дескриптор для перемещения, это фиксированное значение (я только что сделал отображение: нет для первого).
Любая помощь была бы высоко оценена!
-Роб
Ответ №1:
Следуя примеру 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 amp;amp; 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===trueamp;amp;this.values(1)===b.min){g =1;e=d(this.handles[g])}
Имена переменных могут отличаться в вашей версии уменьшенной библиотеки jquery, но точку привязки можно найти с помощью этого поискового запроса в файле:
.range===trueamp;amp;this.
Надеюсь, это поможет.
Ответ №2:
Я быстро просмотрел исходный код, возможно, вы сможете взломать код слайдера пользовательского интерфейса 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 amp;amp; this.values(1) === o.min ) {
index = 1;
closestHandle = $( this.handles[index] );
}
Исправление ошибки — хороший намек на то, куда следует внести изменения, измените ваше условие на следующее:
if( o.range === true amp;amp; index == 0 ) {
Это гарантирует, что если это ползунок диапазона, вы всегда перетаскиваете второй, что бы вы ни делали. Вы можете использовать свой код, загрузив пользовательскую уменьшенную сборку jQuery UI без компонента slider, а затем включить взломанный вручную, или вы можете взломать уменьшенный код.
Ищите:
if(a.range===trueamp;amp;this.values(1)===a.min)
Изменить на:
if(a.range===trueamp;amp;g==0)
Если вы не хотите потерять оригинальный слайдер (чтобы вы могли использовать его в другом месте на своей странице), просто переименуйте это взломанное расширение во что-нибудь другое и включите его отдельно.
Было бы неплохо исправить ошибку перекрытия и добавить опцию в компонент slider, чтобы исправить один из дескрипторов, но, боюсь, на данный момент это выходит за рамки этого ответа.
Комментарии:
1. Автор этого скрипта использовал jQuery ui slider версии v1.7.1, и я нашел это: if (e.range == true amp;amp;this.values (1) ==e.min) и заменил его модом, который вы предложили, но это не внесло никаких изменений?
2. Эта версия была уменьшена по-разному, что привело к разным именам переменных, попробуйте изменить ее на
if(e.range==trueamp;amp;i==0)
3. Это будет man, по крайней мере, когда я проверял в последний раз.
Всегда пожалуйста. Хотя это всего лишь взлом, он не идеален.