2014-11-07 3 views
2

Здесь how to apply a QTip to a JQueryUI slider and display its value.Применение QTip для нескольких слайдеров JQueryUI

var slider = $('#jqueryui-slider').slider({ 
    slide: function(event, ui) { 
     handle.qtip('option', 'content.text', '' + ui.value); 
    } 
}), 
    handle = $('.ui-slider-handle', slider); 

handle.qtip({ 
    id: 'uislider', 
    content: '' + slider.slider('option', 'value'), 
    position: { 
     my: 'bottom center', 
     at: 'top center', 
     container: handle 
    }, 
    hide: { 
     delay: 1000 
    }, 
    style: { 
     widget: true 
    } 
}); 

Я пытаюсь понять, как применить несколько QTips таким же образом (где значение ползунка отображается в наконечнике), но и для любого числа слайдеров на той же странице.

Мне нужно это, потому что я динамически создаю ползунки на странице, а количество ползунков будет отличаться от записи к записи.

EDIT

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

Из-за необходимости быть независимо инициализированным (и необходимость ссылки на различные элементы html в событии slide()) в настоящее время используется несколько .slider(). Ниже приведен пример одного .slider(), который может быть добавлен на страницу (с использованием ASP.net, с элементами управления, динамически генерируемыми в ретрансляторе). Он использует скрытые поля для инициализации слайдера в зависимости от типа обрабатываемого значения. Кроме того, он обновляет метки и другие значения (также динамически генерируемые) на странице внутри события slide().

Текущий ответ показывает, как настроить несколько ползунков, но использует только одно объявление ползунка(). Я действительно ищу ответ, который делает то же самое, но позволяет для каждого слайдера быть независимо настроенным. Если это может быть выполнено с помощью одного вызова ползунка(), это тоже будет работать, хотя я не уверен, что это можно сделать.

var currentSlider = $('#<%=panSlider.ClientID%>').slider({ 
     range: "min", 
     max: parseInt($('#<%=hfMaxValue.ClientID%>').val()), 
     value: parseInt($('#<%=hfInitValue.ClientID%>').val()), 
     step: parseInt($('#<%=hfStepValue.ClientID%>').val()), 
     slide: function (event, ui) { 
      // set the text to show the current value and update the hidden field for postback 
      $("#<%=labValue.ClientID%>").text(ui.value); 
      $("#<%=hfValue.ClientID%>").val(ui.value); 
      // determine the difference from base to current value 
      var difference = ui.value - $('#<%=hfBaseValue.ClientID%>').val(); 
      $("#<%=labDifference.ClientID%>").text(difference); 

      // add tooltip to handle 

      handle.qtip('option', 'content.text', '' + ui.value); 
     } 
     }); 

ответ

2

Вы можете использовать jQuery .each funciton для итерации всех ползунков и их инициализации.

$('.jqueryui-slider').each(function(){ 
    var slider = $(this).slider({ 
     slide: function(event, ui) { 
      handle.qtip('option', 'content.text', '' + ui.value); 
     } 
    }), 
    handle = $('.ui-slider-handle', slider); 

    handle.qtip({ 
     id: 'uislider', 
     content: '' + slider.slider('option', 'value'), 
     position: { 
      my: 'bottom center', 
      at: 'top center', 
      container: handle 
     }, 
     hide: { 
      delay: 1000 
     }, 
     style: { 
      widget: true 
     } 
    });  
}); 

Fiddle

+0

Красиво сделано, спасибо Тревор. – bperniciaro

+0

Другая проблема, с которой я столкнулась, заключается в том, что созданное вами событие slide() переопределяет событие slide(), которое я определил, когда создал ползунок (который имел дополнительный код). Любой способ сделать это так, чтобы событие slide() здесь выполнялось, но не переопределяет мой другой код события слайда()? – bperniciaro

+1

@bperniciaro Можете ли вы создать скрипку, демонстрирующую проблему?Я бы сказал, что вы должны реализовать все функции слайдов, которые вы хотите использовать в одной функции. Но скрипка была бы полезна, чтобы лучше понять и дать вам конкретное решение. – Trevor

2

Посмотрите на мою скрипку: http://jsfiddle.net/dodcbzdw/1/

HTML:

<div class="jqueryui-slider"></div> 
<div class="jqueryui-slider"></div> 
<div class="jqueryui-slider"></div> 

JS:

var slider = $('.jqueryui-slider').slider({ 
    slide: function(event, ui) { 
     handle.qtip('option', 'content.text', '' + ui.value); 
    } 
}) 

Не смотря на проблемы г-индексов кончиков, это должно быть что вы хотели. Просто используйте один и тот же класс для каждого слайдера и используйте этот класс для генерации всех слайдеров и qtips одновременно.

+0

Спасибо за ваш ответ. Пожалуйста, см. Отредактированный вопрос для предостережения, который я изначально не уточнил. – bperniciaro

+0

Одна ошибка со скрипкой: если вы переместите первый слайдер, затем наведите указатель мыши на другой дескриптор, сначала отобразится значение с предыдущего ползунка. Я бы хотел, чтобы каждый совет работал независимо, поэтому все советы могли отображаться вместе, и каждый из них показывал их относительную ценность. – bperniciaro