Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Изменение radio\li ползунком (https://javascript.ru/forum/dom-window/45869-izmenenie-radio%5Cli-polzunkom.html)

cript 19.03.2014 04:04

Изменение radio\li ползунком
 
Приветствую!
Нужно с помощью ползунка (такого http://refreshless.com/nouislider/ или такого http://jsbin.com/uzINaWe/1) осуществить изменение радиокнопки (input type=radio), ну или же выбор нужного <li>пункта меню</li>
Кому не сложно подскажите как это делается, в интернете ничего похожего не нашел..

danik.js 19.03.2014 05:34

С nouislider'ом вешаешь обработчик события slide, в нем получаешь значение $(this).val(), ну и дальше уже используешь его как у тебя задумано. С jQuery UI слайдером наверно примерно также, читай соответствующую доку.

cript 19.03.2014 18:12

Если не затруднит можно поподробнее? Вот например три пункта меню
<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 например..

cript 19.03.2014 22:06

Появился такой вот вариант исполнения данной задачи, однако он на чистом 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>

danik.js 19.03.2014 22:27

cript, доки по виджету slider нашел? Как там указать обработчик изменения ползунка указать и как получать текущее его значение?

cript 19.03.2014 23:00

danik.js,
http://littledev.ru/html/radiojquery.html
никак не получается объединить, если ничего не найду то придется делать на CSS .. )

danik.js 19.03.2014 23:36

cript, доки по виджету slider нашел? Как там указать обработчик изменения ползунка указать и как получать текущее его значение?

cript 19.03.2014 23:45

Цитата:

Сообщение от danik.js (Сообщение 303322)
cript, доки по виджету slider нашел? Как там указать обработчик изменения ползунка указать и как получать текущее его значение?

Это прочитал, ui.value – текущее значение опции value, однако с моей проблемой это мало связано.

рони 20.03.2014 00:13

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>

cript 20.03.2014 00:38

рони,
Благодарю! Это именно то что нужно! :thanks:

cript 20.03.2014 00:53

Возник еще один вопрос. Добавляю в код $( "#rangevalue" ).html( ui.value );
в <output id="rangevalue"></output> все работает, но нужно сделать так чтобы выводилась не числовая последовательность, а опции этих radio (<input type="radio" value="Опция_1">), есть идеи на счет этого?

danik.js 20.03.2014 01:11

Цитата:

Сообщение от рони
$(this).prop({checked : indx == ui.value})

Не проще ли rd.eq(ui.value).prop('checked', true) ?

рони 20.03.2014 01:21

Цитата:

Сообщение от danik.js
Не проще ли rd.eq(ui.value).prop('checked', true) ?

name небыло указано а без одинакового name это несработает

рони 20.03.2014 01:27

cript,
$( "#rangevalue" ).html(rd.eq(ui.value).val());

cript 20.03.2014 01:41

рони,
Снова выручил, огромное спасибо!
Цитата:

Сообщение от рони
Сообщение от danik.js
Не проще ли rd.eq(ui.value).prop('checked', true) ?
name небыло указано а без одинакового name это несработает

А так если name указан то чем этот способ лучше?

рони 20.03.2014 02:08

Цитата:

Сообщение от cript
чем этот способ лучше?

ненужен перебор инпутов - 9 пост, строки 34 -36

cript 21.03.2014 20:49

Появился новый вопрос по этой теме.
Ставлю событие onclick на радио кнопку,
При клике мышкой событие срабатывает, а при наведении ползунком нет..

рони 21.03.2014 20:57

cript,
код покажите

cript 21.03.2014 21:03

Цитата:

Сообщение от рони
код покажите

Радио кнопка:
<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..

рони 21.03.2014 21:22

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>

cript 21.03.2014 21:50

Цитата:

Сообщение от рони
cript, всё работает

В каком смысле?
При нажатии мышкой появляется алерт сообщение, но при перемещении ползунка ничего не происходит..
Вот смотрите: http://dl91.internetrange.com/1/

рони 21.03.2014 22:17

cript,
в каком браузере у вас этот код неработает?
Цитата:

Сообщение от cript
Вот смотрите: http://dl91.internetrange.com/1/

и работает ли этот код тут?

cript 21.03.2014 22:52

Цитата:

Сообщение от рони
и работает ли этот код тут?

браузер хром, тут тоже самое..

В мозилле так же..
В IE тоже не срабатывает.

рони 21.03.2014 23:20

у меня везде работает :blink:

cript 21.03.2014 23:34

Цитата:

Сообщение от рони
у меня везде работает

То есть при перемещении ползунка выходит алерт ?

рони 21.03.2014 23:51

Цитата:

Сообщение от cript
То есть при перемещении ползунка выходит алерт ?

нет - а как связан алерт и ползунок???

cript 21.03.2014 23:56

Цитата:

Сообщение от cript
Появился новый вопрос по этой теме.
Ставлю событие onclick на радио кнопку,
При клике мышкой событие срабатывает, а при наведении ползунком нет..

То есть при перемещении ползунка он только отмечает что выбрана та или иная radio кнопка, но событие которое висит на этой кнопке не срабатывает, а мне нужно чтобы событие срабатывало..

рони 22.03.2014 00:06

cript,
rd.eq(ui.value).trigger('click') добавьте это в 34 строку 20 пост -- но лучше запускать саму функцию вместо тригера

типа action(rd.eq(ui.value).val())

рони 22.03.2014 00:09

cript,
добавлять это лучше в параметр
stop: function(event, ui) { сюда }

cript 22.03.2014 00:25

Цитата:

Сообщение от рони
rd.eq(ui.value).trigger('click') добавьте это в 34 строку 20 пост -- но лучше запускать саму функцию вместо тригера

типа action(rd.eq(ui.value).val())

В таком случае после перемещения ползунка алерт вскакивает один за другим и вместо значения зачем то выводит номер кнопки, вот посмотрите http://dl91.internetrange.com/1/

рони 22.03.2014 00:34

cript,
Цитата:

Сообщение от cript
зачем то выводит номер кнопки

так поставьте то значение которое вам нужно

рони 22.03.2014 00:36

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);
}

cript 22.03.2014 00:50

рони,
Это почти то что нужно, однако все кнопки имеют разные значения онклик, например
<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')">
А вышенаписанный вариант подходит только если у всех кнопок будет одно и то же событие..

рони 22.03.2014 01:14

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);
}

cript 22.03.2014 02:10

Цитата:

Сообщение от рони (Сообщение 303649)
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]) уже не выходит

рони 22.03.2014 02:24

cript,
нет слов... поменяйте 1 на 2500 , 2 на 3000 и тд в 11 строке

если нужны буквы то поставьте кавычки "u1"

cript 22.03.2014 03:09

Цитата:

Сообщение от рони (Сообщение 303660)
cript,
нет слов... поменяйте 1 на 2500 , 2 на 3000 и тд в 11 строке

если нужны буквы то поставьте кавычки "u1"

Спасибо огромное очень выручил!
Еще один вопрос а если это переменные, то в какие кавычки нужно вставлять?

рони 22.03.2014 03:12

cript,
кавычек ненужно для переменных , но сами переменные должны быть в зоне видимости данной функции -- строка 2 тут можно обьявить

cript 22.03.2014 03:20

Цитата:

Сообщение от рони
переменные должны быть в зоне видимости данной функции

А как нибудь достать эти переменные можно?

рони 22.03.2014 03:23

cript,
Здравствуйте!

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел Основы javascript.
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела.


Часовой пояс GMT +3, время: 01:10.