範囲スライダーを使用するWebサイトを作成しています(Webkitブラウザーのみをサポートしていることは知っています)。
私はそれを完全に統合し、うまく機能しています。しかし、テキストボックスを使用して現在のスライド値を表示したいと思います。
最初にスライダーの値が5の場合、テキストボックスの値をスライドすると、テキストボックスに5と表示されるはずです。
CSSまたはhtmlのみを使用してこれを行うことができます。 JQueryを避けたい。出来ますか?
これは、jqueryではなくjavascriptを直接使用します。始めるのに役立つかもしれません。
function updateTextInput(val) {
document.getElementById('textInput').value=val;
}
<input type="range" name="rangeInput" min="0" max="100" onchange="updateTextInput(this.value);">
<input type="text" id="textInput" value="">
個別のJavaScriptコードなしで解決策を探している人向け。 javascriptまたはjquery関数を記述することなく、簡単な解決策はほとんどありません。
<form name="registrationForm">
<input type="range" name="ageInputName" id="ageInputId" value="24" min="1" max="100" oninput="ageOutputId.value = ageInputId.value">
<output name="ageOutputName" id="ageOutputId">24</output>
</form>
テキストボックスに値を表示する場合は、出力を入力に変更します。
更新:
それはまだあなたのhtml内に書かれたJavascriptです。バインディングを以下のJSコードで置き換えることができます:
document.registrationForm.ageInputId.oninput = function(){
document.registrationForm.ageOutputId.value = document.registrationForm.ageInputId.value;
}
エレメントのIDまたは名前のいずれかを使用します。どちらもモーデンブラウザーでサポートされています。
編集可能な入力を備えたバージョン:
<form>
<input type="range" name="amountRange" min="0" max="20" value="0" oninput="this.form.amountInput.value=this.value" />
<input type="number" name="amountInput" min="0" max="20" value="0" oninput="this.form.amountRange.value=this.value" />
</form>
さらに良い方法は、フォーム全体ではなく、入力自体で入力イベントをキャッチすることです(パフォーマンスに関して)。
<input type="range" id="rangeInput" name="rangeInput" min="0" max="20" value="0"
oninput="amount.value=rangeInput.value">
<output id="amount" name="amount" for="rangeInput">0</output>
fiddle (Ryanのコメントに従ってid
を追加)です。
現在の値をスライダーの下に表示し、それに沿って移動したい場合は、これを試してください:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>MySliderValue</title>
</head>
<body>
<h1>MySliderValue</h1>
<div style="position:relative; margin:auto; width:90%">
<span style="position:absolute; color:red; border:1px solid blue; min-width:100px;">
<span id="myValue"></span>
</span>
<input type="range" id="myRange" max="1000" min="0" style="width:80%">
</div>
<script type="text/javascript" charset="utf-8">
var myRange = document.querySelector('#myRange');
var myValue = document.querySelector('#myValue');
var myUnits = 'myUnits';
var off = myRange.offsetWidth / (parseInt(myRange.max) - parseInt(myRange.min));
var px = ((myRange.valueAsNumber - parseInt(myRange.min)) * off) - (myValue.offsetParent.offsetWidth / 2);
myValue.parentElement.style.left = px + 'px';
myValue.parentElement.style.top = myRange.offsetHeight + 'px';
myValue.innerHTML = myRange.value + ' ' + myUnits;
myRange.oninput =function(){
let px = ((myRange.valueAsNumber - parseInt(myRange.min)) * off) - (myValue.offsetWidth / 2);
myValue.innerHTML = myRange.value + ' ' + myUnits;
myValue.parentElement.style.left = px + 'px';
};
</script>
</body>
</html>
このタイプのHTML入力要素には、要素にフォーカスがあるときに左/右/下/上矢印キーでスライダーを移動できるなど、1つの非表示機能があります。 Home/End/PageDown/PageUpキーでも同じです。
複数のスライドを使用していて、jQueryを使用できる場合は、以下を実行して複数のスライダーを簡単に処理できます。
function updateRangeInput(elem) {
$(elem).next().val($(elem).val());
}
input { padding: 8px; border: 1px solid #ddd; color: #555; display: block; }
input[type=text] { width: 100px; }
input[type=range] { width: 400px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="range" min="0" max="100" oninput="updateRangeInput(this)" value="0">
<input type="text" value="0">
<input type="range" min="0" max="100" oninput="updateRangeInput(this)" value="50">
<input type="text" value="50">
また、<input type='range'>
でoninput
を使用すると、範囲をドラッグしている間にイベントを受け取ります。
<form name="registrationForm">
<input type="range" name="ageInputName" id="ageInputId" value="24" min="1" max="10" onchange="getvalor(this.value);" oninput="ageOutputId.value = ageInputId.value">
<input type="text" name="ageOutputName" id="ageOutputId"></input>
</form>
(Vanilla)JavaScriptを含むソリューションがありますが、ライブラリとしてのみです。一度含める必要があります。その後、必要なのは、数値入力の適切なsource
属性を設定することだけです。
source
属性は、聴きたい範囲入力のquerySelectorAll
セレクターでなければなりません。
Selectcsでも動作します。また、複数のリスナーで動作します。そして、それは他の方向で機能します:数値入力を変更すると、範囲入力が調整されます。そして、それは後でページに追加された要素で動作します( https://codepen.io/HerrSerker/pen/JzaVQg をチェックしてください)
Chrome、Firefox、Edge、およびIE11でテスト済み
;(function(){
function emit(target, name) {
var event
if (document.createEvent) {
event = document.createEvent("HTMLEvents");
event.initEvent(name, true, true);
} else {
event = document.createEventObject();
event.eventType = name;
}
event.eventName = name;
if (document.createEvent) {
target.dispatchEvent(event);
} else {
target.fireEvent("on" + event.eventType, event);
}
}
var outputsSelector = "input[type=number][source],select[source]";
function onChange(e) {
var outputs = document.querySelectorAll(outputsSelector)
for (var index = 0; index < outputs.length; index++) {
var item = outputs[index]
var source = document.querySelector(item.getAttribute('source'));
if (source) {
if (item === e.target) {
source.value = item.value
emit(source, 'input')
emit(source, 'change')
}
if (source === e.target) {
item.value = source.value
}
}
}
}
document.addEventListener('change', onChange)
document.addEventListener('input', onChange)
}());
<div id="div">
<input name="example" type="range" max="2250000" min="-200000" value="0" step="50000">
<input id="example-value" type="number" max="2250000" min="-200000" value="0" step="50000" source="[name=example]">
<br>
<input name="example2" type="range" max="2240000" min="-160000" value="0" step="50000">
<input type="number" max="2240000" min="-160000" value="0" step="50000" source="[name=example2]">
<input type="number" max="2240000" min="-160000" value="0" step="50000" source="[name=example2]">
<br>
<input name="example3" type="range" max="20" min="0" value="10" step="1">
<select source="[name=example3]">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
</select>
<br>
</div>
<br>