Текстовое поле jquery с минимальным и максимальным диапазоном

Я вижу этот вопрос, но ни одно из решений не поддерживает диапазон значений min и max

Как разрешить только числовые (0-9) в поле ввода HTML с помощью jQuery?

Я вижу, что http://jstepper.emkay.dk/ пытается сделать это, но кажется очень ошибочным, поскольку позволяет вводить несколько знаков после запятой и других символов, таких как как ";".

есть ли способ, которым я могу использовать одно из этих решений, а также сказать, что только поддержка min 0 и max 100 в записи текстового поля?

Ответ 1

Я автор jStepper, и я только что обновил плагин, чтобы делать то, что вам нравится.

Так что попробуйте еще раз и посмотрите, работает ли это сейчас:)

Ответ 2

HTML5 способ добавления таких полей. Работает в Chrome и Safari:

<input type="range" min="0" max="100" step="1" />

Полный пример:

<input id="picker" type="range" min="0" max="100" step="1" onchange="$('#pickerValue').text(this.value)" />
<div id="pickerValue"></div>

Ответ 3

Создайте пользовательский тип текстового поля, которое принимает только диапазоны. Что-то вроде этого должно работать:

function RangeTextBox(min, max) {
    this.min = min;
    this.max = max;
    this.textBox = $("<input type='text'>");

    // Disallow non-numbers from being typed in box
    this.textBox.keydown(function(event) {
        var isNotBackspaceOrDelete = event.keyCode != 46 && event.keyCode != 8;
        var isNotInteger = event.keyCode < 48 || event.keyCode > 57;
        if(isNotBackspaceOrDelete && isNotInteger) {
            event.preventDefault();
        }
    });
    // Check for a valid range
    this.textBox.keyup(function(event) {
        var textBox = event.target;
        var isNotInRange = (textBox.value < min) || (textBox.value > max);
        if (isNotInRange) {
            textBox.value = textBox.value.slice(0, -1);
        }
    });

    return this.textBox;
}

Чтобы использовать его, просто создайте новый TextBox, вызвав new RangeTextBox(min, max). Например

$(document).ready(function() {
    $("body").append(new RangeTextBox(1, 18));
});

Отказ от ответственности. Это связано с той же проблемой, что и Хармен в другом ответе на поле, не принимающем значение, подобное 2 для числа "26", если минимальное значение равно 6 как 2 < 6. Вы можете использовать таймер или на самом деле переместить эту проверку за пределами событий keyup и keydown, а затем проверить onblur или onchange. Это позволило бы ввести недопустимые данные для ввода поля, но, тем не менее, это намного меньше, чем нужно.

Изменить: это решение позволяет вводить что-либо, но помещает все недопустимые данные, включая вне диапазонов.

function RangeTextBox(min, max) {
    this.min = min;
    this.max = max;
    this.textBox = $("<input type='text'>");

    // Check for a valid range
    this.textBox.keyup(function(event) {
        var textBox = event.target;
        var value = parseInt(textBox.value);
        var isNotNumeric = !/^[0-9]+$/.test(textBox.value);
        var isOutsideRange = (value < min) || (value > max);
        if (isNotNumeric || isOutsideRange) {
            $(textBox).addClass('error');
        }
        else {
            $(textBox).removeClass('error');
        }
    });

    return this.textBox;
}

И таблица стилей:

<style type="text/css">
.error {
    color: red;
}

Ответ 4

Текстовое поле MIN MAX - функция jQuery

Вот, например, способ: "поддерживать только min из 0 и max 100 в записи текстового поля", используя jQuery. Он работает, возвращая вашу запись до того, что было до этого - если вы введете ключ, в результате чего значение будет меньше MIN или более этого MAX. Вы можете установить флаг для принятия только целых чисел.

HTML-тег будет выглядеть так: (JSFIDDLE)

<input type="text" class="maxmin" min="0" max="100" intOnly="true" />

Затем вы запустите этот JavaScript в готовом коде документа:

// Run this on document ready to allow only numbers between
// max and min to be entered into textboxes with class="maxmin".
// Attributes max, min, and intOnly="true/false" are set in the tag.
// Min should probably be "0" or "1", or max and min could be single digits.
// Otherwise for example, if min=5, you couldn't enter 23 because 2 < 5.
$(".maxmin").each(function () {

    var thisJ = $(this);
    var max = thisJ.attr("max") * 1;
    var min = thisJ.attr("min") * 1;
    var intOnly = String(thisJ.attr("intOnly")).toLowerCase() == "true";

    var test = function (str) {
        return str == "" || /* (!intOnly && str == ".") || */
            ($.isNumeric(str) && str * 1 <= max && str * 1 >= min &&
            (!intOnly || str.indexOf(".") == -1) && str.match(/^0\d/) == null);
            // commented out code would allow entries like ".7"
    };

    thisJ.keydown(function () {
        var str = thisJ.val();
        if (test(str)) thisJ.data("dwnval", str);
    });

    thisJ.keyup(function () {
        var str = thisJ.val();
        if (!test(str)) thisJ.val(thisJ.data("dwnval"));
    })
});

Я новичок в этом, поэтому любые конструктивные комментарии будут оценены.

Ответ 5

Вот пример того, как может выглядеть ваш script:

var value, min=6, max=100;

function isNumberPressed(k) {
    // 48-57 are number 0-9 on a normal keyboard, 96-105 are keypad numbers
    return (k > 47 && k < 58) || (k > 95 && k < 106) ? true : false;
}

function isValidNumber(v){
    // Check if a valid number is entered
    return (parseInt(v, 10) >= min && parseInt(v, 10) <= max) ? true : false;
}

$(document).ready(function() {
    $("#test").keydown(function(e) {
        // See if a valid key is pressed
        if(isNumberPressed(e.keyCode)){
            if(isValidNumber($(this).val())) value = $(this).val();
        } 
        // Do nothing if unallowed keys are pressed
        else if(e.keyCode != 46 && e.keyCode != 8) return false;
    }).keyup(function(){
        // If the value, including the latest number that added, is not valid (to high or to low), show the old value again
        if(isValidNumber($(this).val()) == false){
            $(this).val(value);
        }
    });
});

Но у него большой недостаток, вы не можете ввести 26, если минимум равен 6, потому что 2 < 6. Это не проблема, если у вас минимум меньше или равно 10.

Однако, если ваш минимум больше 10, вы можете рассмотреть этот код:

var timer, min=36, max=100;

function isValidNumber(v){
    // Check if a valid number is entered
    return (parseInt(v, 10) >= min && parseInt(v, 10) <= max) ? true : false;
}

$(document).ready(function() {
    $("#test").keydown(function(e) {
        that = this;

        // Clear the timer
        if(timer)
            clearTimeout(timer);

        // Set a new timer with a delay of one second
        timer = setTimeout(function(){
            if(isValidNumber($(that).val()) == false) $(that).addClass('error');
            else $(that).removeClass('error');
        }, 1000);        
    });
});

Он проверяет ввод с задержкой в ​​одну секунду. Для этого вам нужен код CSS, например:

input.error {
    border: 2px solid red;
}

Оба скрипта проверяют значения "на лету", что является отличным методом.

Ответ 6

Я создал jQuery SpinControl, который поддерживает min, max и step. Сначала он проверяет, поддерживается ли SpinControl браузером (Opera), прежде чем он добавит пользовательский.

Ответ 7

JStepper имеет ошибку, Я пробую тестер на их сайте. http://jstepper.emkay.dk/Default.aspx

apple правила, но я могу ввести текст: 8778.09999

Ответ 8

Я искал и, наконец, понимаю, что введенное значение должно быть проверено в трех случаях. keydown, keypress и keyup, и у любого из них есть свои обязанности. нажатие клавиши: Проверьте нажатую клавишу и решите ввести введенный символ. Тогда, если это числовое значение, пусть это иначе предотвратит действие. Как вы можете видеть, я попытался проверить диапазон здесь.

//var final = val + String.fromCharCode(charCode);        
//alert(final);        
//if (final < min || final > max)
// return false;       

но перед этим мы просто имеем новый символ и значение. так что это неправильно, если мы попытаемся проверить их сумму, потому что, возможно, пользователь выбрал некоторую часть значения и новый характер. предположим, что максимальный диапазон равен 100, и у нас есть "345" в Входном и выбранном пользователем "34", теперь пользователь нажимает "2", а результат должен быть "25", но сумма "345" + "2" равна 347, и функция предотвращает это, Поэтому я решил использовать событие keyup для проверки диапазона и правильного значения. Наконец, ключ, используемый для проверки стрелки вверх и вниз и контрольного значения, когда браузер поддерживает тип ввода номера HTML5 без изменения типа нажатия клавиш, поэтому вы не можете его использовать.

Я написал простой script и надеюсь, что помощь. Вы можете увидеть его в http://jsfiddle.net/QMaster/r4hwr3a6/