Изменение radio\li ползунком
Приветствую!
Нужно с помощью ползунка (такого http://refreshless.com/nouislider/ или такого http://jsbin.com/uzINaWe/1) осуществить изменение радиокнопки (input type=radio), ну или же выбор нужного <li>пункта меню</li> Кому не сложно подскажите как это делается, в интернете ничего похожего не нашел.. |
С nouislider'ом вешаешь обработчик события slide, в нем получаешь значение $(this).val(), ну и дальше уже используешь его как у тебя задумано. С jQuery UI слайдером наверно примерно также, читай соответствующую доку.
|
Если не затруднит можно поподробнее? Вот например три пункта меню
<div class="output"> <input type="radio" class="radio1"> <input type="radio" class="radio2"> <input type="radio" class="radio3"> </div> Есть такой ползунок <div class="slider"></div> MK.elementProcessors.push( function( el ) { if( $( el ).hasClass( 'ui-slider' ) ) { return { on: 'slide', getValue: function() { return $( this ).slider( 'option', 'value' ); }, setValue: function( v ) { $( this ).slider( 'option', 'value', v ); } }; } }); $( ".slider1" ).slider({ min: 0, max: 3 }); var mk = new Matreshka(); mk.radio1 = testvalue; mk.bindElement({ radio1: '.slider' radio2: '.slider' radio3: '.slider' }); mk.bindElement({ radio1: '.output .radio1', radio2: '.output .radio2' radio3: '.output .radio3' }, MK.htmlp ); Нужно сделать так чтобы при перемещении ползунка выбирался нужный пункт, а уже на этом пункте будет висеть событие onselect например.. |
Появился такой вот вариант исполнения данной задачи, однако он на чистом JS, хотелось бы как тут http://jsbin.com/uzINaWe/1, кто знает что нужно для этого сделать?)
<script> function checkradio() { var d =0,s; var polzunok = document.getElementById("polzunok"); var radios = document.getElementsByName('alc'); s = parseInt(polzunok.max); d = (index1 <= s) ? 1 : -1; index1+=d; alert(index1); radios[index1].checked = true; } onload = function () { document.getElementById ('polzunok').oninput = function () {document.getElementsByName ('alc') [this.value].checked = 1} } </script> <form action="handler.php"> <div id = "radios"> <input type="radio" checked name="alc" value = "0"> <input type="radio" name="alc" value = "1"> <input type="radio" name="alc" value = "2"> <input type="radio" name="alc" value = "3"> <input type="radio" name="alc" value = "4"> <input type="radio" name="alc" value = "5"> <input type="radio" name="alc" value = "6"> <input type="radio" name="alc" value = "7"> <input type="radio" name="alc" value = "8"> <input type="radio" name="alc" value = "9"> <input type="radio" name="alc" value = "10"> </div> <input id = "polzunok" type="range" min="0" max="10" step="1" value="0"> </form> |
cript, доки по виджету slider нашел? Как там указать обработчик изменения ползунка указать и как получать текущее его значение?
|
danik.js,
http://littledev.ru/html/radiojquery.html никак не получается объединить, если ничего не найду то придется делать на CSS .. ) |
cript, доки по виджету slider нашел? Как там указать обработчик изменения ползунка указать и как получать текущее его значение?
|
Цитата:
|
cript,
:blink: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>slider demo</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/mint-choc/jquery-ui.css"> <style> .slider { margin: 10px;width : 500px; } </style> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> </head> <body> <div class="output"> <input type="radio" class="radio1" > <input type="radio" class="radio2" checked="checked"> <input type="radio" class="radio3"> </div> Есть такой ползунок <div class="slider"></div> <script> var rd = $('.output input:radio'); $(".slider").slider({ animate: true , min: 0, max: 2, value: 1, slide: function( event, ui ) { rd.each(function(indx, element){ $(this).prop({checked : indx == ui.value}) }); } }); </script> </body> </html> |
рони,
Благодарю! Это именно то что нужно! :thanks: |
Возник еще один вопрос. Добавляю в код $( "#rangevalue" ).html( ui.value );
в <output id="rangevalue"></output> все работает, но нужно сделать так чтобы выводилась не числовая последовательность, а опции этих radio (<input type="radio" value="Опция_1">), есть идеи на счет этого? |
Цитата:
|
Цитата:
|
cript,
$( "#rangevalue" ).html(rd.eq(ui.value).val()); |
рони,
Снова выручил, огромное спасибо! Цитата:
|
Цитата:
|
Появился новый вопрос по этой теме.
Ставлю событие onclick на радио кнопку, При клике мышкой событие срабатывает, а при наведении ползунком нет.. |
cript,
код покажите |
Цитата:
<input type="radio" class="radio" name="button" value="<?=$value;?>" onclick="action('2500')"> Слайдер: <div id="slider-vertical" style="height:200px;"></div> <script> var rd = $('.output input:radio'); $("#slider-vertical").slider({ animate: true, orientation: "vertical", range: "min", min: 0, max: 5, value: 0, slide: function(event, ui) { $("#rangevalue").html(rd.eq(ui.value).val()); rd.each(function(indx, element){ // первый вариант $(this).prop({checked : indx == ui.value}) }); rd.eq(ui.value).prop('checked', true) // второй вариант } }); $("#rangevalue").val( $("#slider-vertical").slider("value")); </script> <label for="rangevalue">Value:</label> <div id="rangevalue" style="border:0; color:#f6931f; font-weight:bold;"></div> onclick пробовал заменять на onchange onselect onsubmit.. |
cript, всё работает
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>slider demo</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/mint-choc/jquery-ui.css"> <style> div { margin-top: 20px; } .slider {width : 500px; } </style> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> <script> $(function () { var rd = $('.output input:radio'); $("#slider-vertical").slider({ animate: true, orientation: "vertical", range: "min", min: 0, max: 5, value: 0, slide: function(event, ui) { $("#rangevalue").html(rd.eq(ui.value).val()); rd.eq(ui.value).prop('checked', true) // второй вариант } }); $("#rangevalue").html( $("#slider-vertical").slider("value")); }) function action(str) { alert(str); } </script> </head> <body> <div class="output"> <input type="radio" class="radio" name="button" value="1" onclick="action('2500')" checked="checked"> <input type="radio" class="radio" name="button" value="2" onclick="action('2500')"> <input type="radio" class="radio" name="button" value="3" onclick="action('2500')"> <input type="radio" class="radio" name="button" value="4" onclick="action('2500')"> <input type="radio" class="radio" name="button" value="5" onclick="action('2500')"> <input type="radio" class="radio" name="button" value="6" onclick="action('2500')"> </div> <label for="rangevalue">Value:</label> <div id="rangevalue" style="border:0; color:#f6931f; font-weight:bold;"></div> <div id="slider-vertical" style="height:200px;"></div> </body> </html> |
Цитата:
При нажатии мышкой появляется алерт сообщение, но при перемещении ползунка ничего не происходит.. Вот смотрите: http://dl91.internetrange.com/1/ |
cript,
в каком браузере у вас этот код неработает? Цитата:
|
Цитата:
В мозилле так же.. В IE тоже не срабатывает. |
у меня везде работает :blink:
|
Цитата:
|
Цитата:
|
Цитата:
|
cript,
rd.eq(ui.value).trigger('click') добавьте это в 34 строку 20 пост -- но лучше запускать саму функцию вместо тригера типа action(rd.eq(ui.value).val()) |
cript,
добавлять это лучше в параметр stop: function(event, ui) { сюда } |
Цитата:
|
cript,
Цитата:
|
cript,
$(function () { var rd = $('.output input:radio'); $("#slider-vertical").slider({ animate: true, orientation: "vertical", range: "min", min: 0, max: 5, value: 0, stop: function(event, ui) { action('2500')}, slide: function(event, ui) { $("#rangevalue").html(rd.eq(ui.value).val()); rd.eq(ui.value).prop('checked', true) // второй вариант //action(rd.eq(ui.value).val()) } }); $("#rangevalue").html( $("#slider-vertical").slider("value")); }) function action(str) { alert(str); } |
рони,
Это почти то что нужно, однако все кнопки имеют разные значения онклик, например <input type="radio" class="radio" name="button" value="1" onclick="action('2500')" checked="checked"> <input type="radio" class="radio" name="button" value="2" onclick="action('3500')"> А вышенаписанный вариант подходит только если у всех кнопок будет одно и то же событие.. |
cript,
подумайте хоть немного сами $(function () { var rd = $('.output input:radio'); $("#slider-vertical").slider({ animate: true, orientation: "vertical", range: "min", min: 0, max: 5, value: 0, stop: function(event, ui) { action([1,2,3,4,5,6][ui.value])}, slide: function(event, ui) { $("#rangevalue").html(rd.eq(ui.value).val()); rd.eq(ui.value).prop('checked', true) // второй вариант } }); $("#rangevalue").html( $("#slider-vertical").slider("value")); }) function action(str) { alert(str); } |
Цитата:
Однако данный вариант не срабатывает в том случае если значения будут буквенные, например action([u1,u2,u3,u4,u5,u6][ui.value]) уже не выходит |
cript,
нет слов... поменяйте 1 на 2500 , 2 на 3000 и тд в 11 строке если нужны буквы то поставьте кавычки "u1" |
Цитата:
Еще один вопрос а если это переменные, то в какие кавычки нужно вставлять? |
cript,
кавычек ненужно для переменных , но сами переменные должны быть в зоне видимости данной функции -- строка 2 тут можно обьявить |
Цитата:
|
cript,
Здравствуйте! Судя по вашему сообщению, вы ну совсем не знаете javascript. Освойте основы языка и вопрос отпадет сам, полностью или частично. А с чем не справитесь - поможем. На сайте javascript можно начать изучать с учебника, раздел Основы javascript. Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/ Задавайте конкретные вопросы по ходу дела. |
Часовой пояс GMT +3, время: 01:10. |