我想使用滑块控件输入选择。可能的值为:5000,25000,50000,75000和100000.但是,我无法获得范围输入以限制这些选择。我最接近的是:
<datalist id="valid-options">
<option>5000</option>
<option>25000</option>
<option>50000</option>
<option>75000</option>
<option>100000</option>
</datalist>
<input type="range" min="5000" max="100000" step="5000" list="valid-options" ng-model="selectedValue" />
您可以在此处查看完整示例:http://jsfiddle.net/au14Lv2t/1/
此解决方案的问题在于它允许使用无效值,如10000,15000等。
我正在寻找一个AngularJS(或纯HTML5 / JS / CSS)解决方案。我宁愿不介绍jQuery。
谢谢!
答案 0 :(得分:2)
您可以搜索最接近的有效值,并将输入值设置为每个值更改事件的值
var inputElement = document.getElementById('customRangeInput');
inputElement.oninput = setInput;
inputElement.onchange = setInput; // IE fix
function setInput(){
inputElement.value = closestValue(inputElement.value);
}
var validValues = [5000,25000,50000,75000,100000];
function closestValue(input)
{
var differences = [];
for (var i = 0; i < validValues.length; i++)
differences.push( Math.abs(validValues[i] - input));
var index = indexOfSmallest(differences);
return validValues[index];
}
function indexOfSmallest(inputArray) {
var lowest = 0;
for (var i = 1; i < inputArray.length; i++) {
if (inputArray[i] < inputArray[lowest]) lowest = i;
}
return lowest;
}
html应该是这样的
<input id="customRangeInput" type="range" min="5000" max="100000" step="5000" list="valid-options" ng-model="selectedValue" />Selected Value: {{ selectedValue }}</div>
答案 1 :(得分:1)
你需要使用属性步骤,让你决定每一步的数量,对于你的例子,大多数值是25000 所以make step =&#34; 25000&#34;
<input type="range" min="0" max="100000" step="25000">
并解决5000值......在你的例子中你的第一个值是5000,你所做的就是如果你得到的是0这是你的低值5000 ...其他值增加25000 ...希望这有帮助。
在这种情况下你不需要数据专家。
答案 2 :(得分:1)
您可以使用范围滑块操作的地图,而不是尝试直接使用这些值,因此您的ng模型类似于myrangeIndex
,当您绑定输出元素时,使用{{1}获取价值。同样,当您在其他地方使用该值时,您需要先查找它。如果您知道元素列表可能会在以后增长/缩小,则可以使用rangeValues[myrangeIndex]
,这样您只需要在一个位置更新代码。如果可以从序数值计算值,则可以在加载控制器时简单地填充rangeValues,例如,对于任何给定的max="{{rangeValues.length}}"
,$scope.rangeValues = f(1,100);
。