以字符串作为输入的 jquery spinner

发布于 2025-01-05 01:35:40 字数 195 浏览 1 评论 0原文

您好,我搜索了,但没有找到这样的解决方案。是否可以使用 jquery 创建一个微调器,其中输入文本值(字符串)而不是数字。或者换句话说,与此 http://jsfiddle.net/yaQSP/ 而是 ..-1,0,1.. 从列表或字符串数​​组中旋转文本值。

Hi I searched but i didn't find such solution.Is it possible to create a spinner with jquery which has text values (strings) as input instead of numbers.Or in other words the same as this http://jsfiddle.net/yaQSP/ but instead ..-1,0,1.. to spin text values from list or array of strings.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

随风而去 2025-01-12 01:35:40

之前的答案不起作用。我在给定的链接下用 chrome 和 firefox 测试了它。

请在此处查找其他解决方案。

您需要覆盖微调器小部件的 _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();
});

http://jsfiddle.net/k46bA/

我完成了我自己的小部件。它使用字符串数组作为输入。

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

Previous answer does not work. I tested it under given links with chrome and firefox.

Look here for another solution.

You need to overwrite the _parse and _format functions of the spinner widget.

Here is an example with just simple Bool-like spinner:

$.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();
});

http://jsfiddle.net/k46bA/

I finished my own widget. It uses a string array as input.

$.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;
    },          
}); 

Usage:

//paper type spinner
var arrPaperTypes = ["Standard 80g", "Standard 100g", "Gloss 100g", "Gloss 120g"];

$(function() {
    $("#spinner-paper").formatSpinner({
        values: arrPaperTypes
    });
}); 
与他有关 2025-01-12 01:35:40

在 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/MartynDavis/gzmvc2ds/

Building on from Bojan's answer, with a little finessing, and by overwriting _adjustValue, a cleaner solution is available:

$.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>

Also available here: http://jsfiddle.net/MartynDavis/gzmvc2ds/

忆依然 2025-01-12 01:35:40

更新

只是清理了一下 http://jsfiddle.net/yaQSP/25/


请参阅: http://jsfiddle.net/yaQSP/23/

你可以做得有点hacky像这样:创建你的数组。

设置:

$('#spinner').spinner({
    step: 1,
    numberformat: "n"
});​

并在输入字段上绑定一个更改事件。然后这样称呼它->

yourArr[i]

i 是输入字段的值。

Update

Just cleaned that up a bit http://jsfiddle.net/yaQSP/25/


see: http://jsfiddle.net/yaQSP/23/

You could do it a bit hacky like this: Create your Array.

Set:

$('#spinner').spinner({
    step: 1,
    numberformat: "n"
});​

and bind an change event on the input field. Then call it like this ->

yourArr[i]

whereas i is the value of the input field.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文