任何适用于 JQuery(或 Javascript)的好数字选择器?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8130359/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 02:24:14  来源:igfitidea点击:

Any Good Number Picker for JQuery (or Javascript)?

javascriptjqueryjquery-ui

提问by Anderson Karu

Are there any good number picker for jquery (or standalone js)?

jquery(或独立js)有什么好的数字选择器吗?

I would like a number picker where there is a max and min number that the user can choose from. Also, it have other options such as displaying odd number or even number or prime number or a range of number whereby some numbers in between are skipped.

我想要一个数字选择器,其中有用户可以选择的最大和最小数字。此外,它还有其他选项,例如显示奇数或偶数或素数或一个数字范围,其中跳过一些数字。

采纳答案by Ricardo Souza

Using a selectto do this you can create an array with the numbers to skip and do a forloop to write the options:

使用 aselect来执行此操作,您可以创建一个包含要跳过的数字的数组,并执行一个for循环来编写options

int minNumber = 0;
int maxNumber = 10;

int[] skipThese = { 5, 7 };

for (int i = minNumber; i <= maxNumber; i++)
{
    if(!skipThese.Contains(i)) Response.Write(String.Concat("<option value=\"", i, "\">", i, "</option>"));
}

You can do this with razor or any other way to output the HTML.

您可以使用 razor 或任何其他方式来输出 HTML。

You can also do this with jQuery, dynamicaly, following the same idea:

您也可以使用 jQuery 动态地执行此操作,遵循相同的想法:

$(document).ready(function() {
    var minNumber = 0;
    var maxNumber = 10;

    var skipThese = [5, 7];

    for (var i = minNumber; i <= maxNumber; i++) {
        if ($.inArray(i, skipThese) == -1) $('#selectListID').append("<option value=\"" + i + "\">" + i + "</option>");
    }
});

Edit: Or you can use the C# code above in an aspx page and load it with AJAX from the page:

编辑:或者您可以在 aspx 页面中使用上面的 C# 代码并从页面中使用 AJAX 加载它:

Create a select box in the page:

在页面中创建一个选择框:

<select name="numPicker" id="numPicker">
    <option>Loading...</option>
</select>

In a script in this page you could use jQuery's ajax()to fetch the data and populate the <select>:

在此页面的脚本中,您可以使用 jQueryajax()来获取数据并填充<select>

$(document).ready(function() {
    var numPickerSelect = $("#numPicker");
    $.ajax({
        url: 'url/to/page.aspx',
        type: 'post'
        success: function(data) {
            numPickerSelect.find('option').remove(); // Remove the options in the select field
            numPickerSelect.append(data); // Load the content generated by the server into the select field
        },
        error: function() {
            alert('An error has ocurred!');
        }
    });
    //Or use this (not sure if will work)
    numPickerSelect.load("url/to/page.aspx");
});

回答by Craig

I have used this. You should be able to modify to add extra options such as min and max fairly easily.

我用过这个。您应该能够很容易地修改以添加额外的选项,例如 min 和 max。

// Make a control only accept numeric input
// eg, $("#myedit").numeric()
//  $("#myedit").numeric({alow: ' ,.'})
//  $("#myedit").numeric({decimals: 2})

(function($) {

    $.fn.alphanumeric = function(p) {

        if (p == 'destroy') {
            $(this).unbind('keypress');
            $(this).unbind('blur');
            return;
        }

        p = $.extend({
            ichars: "!@#$%^&*()+=[]\\';,/{}|\":<>?~`.- ",
            nchars: "",
            allow: "",
            decimals: null
        }, p);

        return this.each
            (
                function() {

                    if (p.nocaps) p.nchars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                    if (p.allcaps) p.nchars += "abcdefghijklmnopqrstuvwxyz";

                    s = p.allow.split('');
                    for (i = 0; i < s.length; i++) if (p.ichars.indexOf(s[i]) != -1) s[i] = "\" + s[i];
                    p.allow = s.join('|');

                    var reg = new RegExp(p.allow, 'gi');
                    var ch = p.ichars + p.nchars;
                    ch = ch.replace(reg, '');

                    var dp = p.decimals;

                    var isInteger = function(val) {
                        var objRegExp = /(^-?\d\d*$)/;
                        return objRegExp.test(val);
                    };

                    var isNumeric = function(val) {
                        // If the last digit is a . then add a 0 before testing so if they type 25. it will be accepted
                        var lastChar = val.substring(val.length - 1);
                        if (lastChar == ".") val = val + "0";

                        var objRegExp = new RegExp("^\s*-?(\d+(\.\d{1," + dp + "})?|\.\d{1," + dp + "})\s*$", "g");
                        if (dp == -1)
                            objRegExp = new RegExp("^\s*-?(\d+(\.\d{1,25})?|\.\d{1,25})\s*$", "g");

                        var result = objRegExp.test(val);
                        return result;
                    };
                    $(this).blur(function(e) {
                        var text = $(this).val();
                        if (dp != null) {
                            if (dp == 0) {
                                if (!isInteger(text)) {
                                    $(this).val('');
                                    e.preventDefault();
                                }
                            }
                            else {
                                if (!isNumeric(text)) {
                                    $(this).val('');
                                    e.preventDefault();
                                }
                            }
                        } else {
                            var c = text.split('')
                            for (i = 0; i < text.length; i++) {
                                if (ch.indexOf(c[i]) != -1) {
                                    $(this).val('');
                                    e.preventDefault();
                                };
                            }
                        }
                    });
                    $(this).keypress
                        (
                            function(e) {

                                switch (e.which) {
                                    //Firefox fix, for ignoring specific presses             
                                    case 8: // backspace key
                                        return true;
                                    case 46: // delete key
                                        return true;
                                };

                                if (dp != null) {

                                    if (e.which == 32) { e.preventDefault(); return false; }

                                    var range = getRange(this);
                                    var typed = String.fromCharCode(e.which);
                                    var text = $(this).val().substr(0, range.start) + typed + $(this).val().substr(range.start);

                                    if (dp == 0) {
                                        if (!isInteger(text)) e.preventDefault();
                                    }
                                    else {
                                        if (!isNumeric(text)) e.preventDefault();
                                    }
                                    return;
                                }

                                if (!e.charCode) k = String.fromCharCode(e.which);
                                else k = String.fromCharCode(e.charCode);

                                if (ch.indexOf(k) != -1) e.preventDefault();
                                if (e.ctrlKey && k == 'v') e.preventDefault();
                            }
                        );

                    $(this).bind('contextmenu', function() { return false });

                }
            );

    };

    $.fn.numeric = function(p) {

        if (p == 'destroy') {
            $(this).unbind('keypress');
            $(this).unbind('blur');
            return;
        }
        var az = "abcdefghijklmnopqrstuvwxyz";
        az += az.toUpperCase();

        var opts = {};

        if (!isNaN(p)) {
            opts = $.extend({
                nchars: az
            }, { decimals: p });
        } else {
            opts = $.extend({
                nchars: az
            }, p);
        }
        return this.each(function() {
            $(this).alphanumeric(opts);
        }
        );

    };

    $.fn.integer = function(p) {

        if (p == 'destroy') {
            $(this).unbind('keypress');
            $(this).unbind('blur');
            return;
        }

        var az = "abcdefghijklmnopqrstuvwxyz";
        az += az.toUpperCase();

        p = {
            nchars: az,
            allow: '-',
            decimals: 0
        };

        return this.each(function() {
            $(this).alphanumeric(p);
        }
        );
    };

    $.fn.alpha = function(p) {

        if (p == 'destroy') {
            $(this).unbind('keypress');
            $(this).unbind('blur');
            return;
        }
        var nm = "1234567890";

        p = $.extend({
            nchars: nm
        }, p);

        return this.each(function() {
            $(this).alphanumeric(p);
        }
        );

    };

})(jQuery);