【发布时间】:2026-02-04 22:00:02
【问题描述】:
嗨,我搜索了,但我没有找到这样的解决方案。是否可以使用 jquery 创建一个微调器,它具有文本值(字符串)作为输入而不是数字。或者换句话说,与 http://jsfiddle.net/yaQSP/ 相同,但取而代之的是..-1,0,1.. 从字符串列表或数组中旋转文本值。
【问题讨论】:
嗨,我搜索了,但我没有找到这样的解决方案。是否可以使用 jquery 创建一个微调器,它具有文本值(字符串)作为输入而不是数字。或者换句话说,与 http://jsfiddle.net/yaQSP/ 相同,但取而代之的是..-1,0,1.. 从字符串列表或数组中旋转文本值。
【问题讨论】:
上一个答案不起作用。我在给定的 chrome 和 firefox 链接下对其进行了测试。
查看here 寻找其他解决方案。
您需要覆盖微调器小部件的 _parse 和 _format 函数。
这是一个简单的类布尔微调器的示例:
$.widget("ui.boolspinner", $.ui.spinner, {
options: {
min: 0,
max: 1,
start: 1
},
_parse: function (value) {
if (typeof value === "string") {
return (value.toLowerCase() == "ja")?1:0;
}
return value;
},
_format: function (value) {
return (value == 1)?"Ja":"Nein";
}
});
$(function() {
$("#spinner-testprint").boolspinner();
});
我完成了自己的小部件。它使用字符串数组作为输入。
$.widget("ui.formatSpinner", $.ui.spinner, {
options: {
},
_parse: function (value) {
if (typeof value === "string") {
return this.options.values.indexOf(value);
}
return value;
},
_format: function (value) {
//wrap around
if (value < 0) {
value = this.options.values.length-1;
}
if (value > this.options.values.length-1) {
value = 0;
}
var format = this.options.values[value];
return format;
},
});
用法:
//paper type spinner
var arrPaperTypes = ["Standard 80g", "Standard 100g", "Gloss 100g", "Gloss 120g"];
$(function() {
$("#spinner-paper").formatSpinner({
values: arrPaperTypes
});
});
【讨论】:
以 Bojan 的回答为基础,稍加修饰,并通过覆盖 _adjustValue,可以获得更清洁的解决方案:
$.widget("ui.textSpinner", $.ui.spinner, {
options: {
wrap: true
},
_parse: function (value) {
if ((value === '') || isNaN(value)) {
value = this.options.values.indexOf(value);
if (value === -1) {
value = 0;
}
}
if (value < 0) {
value = this.options.wrap ? (this.options.values.length -1) : 0;
} else if (value >= this.options.values.length) {
value = this.options.wrap ? 0 : (this.options.values.length - 1);
}
return value;
},
_format: function (value) {
return this.options.values[value];
},
_adjustValue: function (value) {
if (value < 0) {
value = this.options.wrap ? (this.options.values.length - 1) : 0;
} else if (value >= this.options.values.length) {
value = this.options.wrap ? 0 : (this.options.values.length - 1);
}
return value;
}
});
var arrText = ["John", "Paul", "George", "Ringo"];
$(function() {
$("#spinner-text").textSpinner({
values: arrText,
spin: function( event, ui ) {
$( "#spinner-value" ).text(ui.value);
}
});
$("#spinner-text-nowrap").textSpinner({
values: arrText,
wrap: false,
spin: function( event, ui ) {
$( "#spinner-value-nowrap" ).text(ui.value);
}
});
});
<link href="http://code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.11.1/jquery-ui.js"></script>
<p>
Wrapping <input id="spinner-text" value="3" readonly /><br />
Value: <span id="spinner-value">3</span>
</p>
<p>
No wrapping <input id="spinner-text-nowrap" value="3" readonly /><br />
Value: <span id="spinner-value-nowrap">3</span>
</p>
【讨论】:
刚刚清理了一下http://jsfiddle.net/yaQSP/25/
见:http://jsfiddle.net/yaQSP/23/
你可以像这样有点hacky:创建你的数组。
设置:
$('#spinner').spinner({
step: 1,
numberformat: "n"
});
并在输入字段上绑定更改事件。然后这样称呼它->
yourArr[i]
而i 是输入字段的值。
【讨论】: