カスタム書式と noUiSlider の時間値の libLink が期待どおりに機能しません。
スライダーを使用して、24 時間形式 (17:32 など) で時間を出力したいと考えています。
また、有効な時間を入力し、libLink を介してスライダーを更新したいと考えています。
スライダーを動かすと、入力の時間が正しく更新されます。ただし、その逆は機能しません。入力に新しい時間を入力してからフォーカスを外すと、入力が前の値にリセットされます。
関数 HHMMtoMinutes() で console.log のコメントを外すと、2 回起動することがわかります。ここで何が起きてるの?
$(document).ready(function() {
$(".slider").noUiSlider({
start: ["07:30"],
range: {
'min': 0,
'max': 24 * 60
},
format: {
to: minutesToHHMM,
from: HHMMtoMinutes
}
});
$(".slider").Link("lower").to($("#time"));
});
function minutesToHHMM(value) {
value = Math.round(value);
var hour = Math.floor(value / 60);
var min = value - hour * 60;
//console.log("value:" + value + "\thour: " + hour + "\tmin: " + min)
return ("0" + hour).slice(-2) + ":" + ("0" + min).slice(-2);
}
function HHMMtoMinutes(value) {
var split = value.toString().split(":");
var hour = parseInt(split[0]) * 60;
var min = parseInt(split[1]);
//console.log("value: " + value + "\thour: " + hour + "\tmin " + min);
return hour + min;
}
<link href="https://refreshless.com/nouislider/source/distribute/jquery.nouislider.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://refreshless.com/nouislider/source/distribute/jquery.nouislider.all.js"></script>
<div style="width:80%; margin:80px 0 0 100px">
<div class="slider"></div>
<form style="margin-top:20px">
<label for="time">time</label>
<input type="text" id="time" name="time" />
</form>
</div>
ここにも JSFiddle があります: https://jsfiddle.net/g42e6saf/2/