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

В numpy data.T ничего не делает с базовым массивом 1D. Он просто манипулирует шагами для получения транспонирования. Это делает операцию постоянной и постоянной памяти.

Похоже, что pycuda.to_gpu() не соблюдает шаги и просто копирует базовый 1D-массив. Это даст точное поведение, которое вы наблюдаете.

На мой взгляд, в коде нет ничего плохого. Скорее, я считаю это ошибкой в ​​pycuda.

Я googled вокруг и нашел поток, который подробно обсуждает эту проблему .

В качестве обходного пути вы можете попробовать передать numpy.ascontiguousarray(data.T) в gpuarray.to_gpu(). Это, конечно же, создаст вторую копию данных в оперативной памяти хоста.

855
задан 4 revs, 3 users 57% 3 September 2011 в 22:13
поделиться

9 ответов

Примечание: Это обновленный ответ. Комментарии ниже относятся к старой версии, в которой использовались коды клавиш.

jQuery

Попробуйте сами на JSFiddle .

Для этого нет собственной реализации jQuery, но вы можете фильтровать ввод значения текста со следующим плагином inputFilter (поддерживает копирование + вставку, перетаскивание + отпускание, сочетания клавиш, операции контекстного меню, клавиши без ввода, положение каретки, различные раскладки клавиатуры и все браузеры, начиная с IE 9 ):

// Restricts input for the set of matched elements to the given inputFilter function.
(function($) {
  $.fn.inputFilter = function(inputFilter) {
    return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
      if (inputFilter(this.value)) {
        this.oldValue = this.value;
        this.oldSelectionStart = this.selectionStart;
        this.oldSelectionEnd = this.selectionEnd;
      } else if (this.hasOwnProperty("oldValue")) {
        this.value = this.oldValue;
        this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
      } else {
        this.value = "";
      }
    });
  };
}(jQuery));

Теперь вы можете использовать плагин inputFilter для установки входного фильтра:

$(document).ready(function() {
  $("#myTextBox").inputFilter(function(value) {
    return /^\d*$/.test(value);    // Allow digits only, using a RegExp
  });
});

См. демонстрацию JSFiddle для получения дополнительных примеров входного фильтра. Также обратите внимание, что вы все еще должны выполнять проверку на стороне сервера!

Чистый JavaScript (без jQuery)

На самом деле jQuery для этого не нужен, вы можете сделать то же самое с чистым JavaScript. См. этот ответ .

HTML 5

HTML 5 имеет собственное решение с (см. Спецификацию ) , но обратите внимание, что поддержка браузеров различается:

  • Большинство браузеров проверяют ввод только при отправке формы, а не при вводе.
  • Большинство мобильных браузеров не поддерживают шаг , Атрибуты min и max .
  • Chrome (версия 71.0.3578.98) по-прежнему позволяет пользователю вводить символы e и E в поле. Также см. этот вопрос .
  • Firefox (версия 64.0) и Edge (EdgeHTML версия 17.
1221
ответ дан 22 November 2019 в 21:08
поделиться
$(document).ready(function() {
    $("#txtboxToFilter").keydown(function(event) {
        // Allow only backspace and delete
        if ( event.keyCode == 46 || event.keyCode == 8 ) {
            // let it happen, don't do anything
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.keyCode < 48 || event.keyCode > 57 ) {
                event.preventDefault(); 
            }   
        }
    });
});

Источник: http://snipt.net/GerryEng/jquery-making-textfield-only-accept-numeric-values ​​

27
ответ дан 22 November 2019 в 21:08
поделиться

Вы можете использовать эту функцию JavaScript:

function maskInput(e) {
    //check if we have "e" or "window.event" and use them as "event"
        //Firefox doesn't have window.event 
    var event = e || window.event 

    var key_code = event.keyCode;
    var oElement = e ? e.target : window.event.srcElement;
    if (!event.shiftKey && !event.ctrlKey && !event.altKey) {
        if ((key_code > 47 && key_code < 58) ||
            (key_code > 95 && key_code < 106)) {

            if (key_code > 95)
                 key_code -= (95-47);
            oElement.value = oElement.value;
        } else if(key_code == 8) {
            oElement.value = oElement.value;
        } else if(key_code != 9) {
            event.returnValue = false;
        }
    }
}

И вы можете привязать ее к своему текстовому полю следующим образом:

$(document).ready(function() {
    $('#myTextbox').keydown(maskInput);
});

Я использую вышеуказанное в продакшене, и он отлично работает, и это кроссбраузерно. Кроме того, он не зависит от jQuery, поэтому вы можете привязать его к текстовому полю с помощью встроенного JavaScript:

<input type="text" name="aNumberField" onkeydown="javascript:maskInput()"/>
8
ответ дан 22 November 2019 в 21:08
поделиться

Необходимо убедиться, что цифровая клавиатура и клавиша табуляции тоже работают

 // Allow only backspace and delete
            if (event.keyCode == 46 || event.keyCode == 8  || event.keyCode == 9) {
                // let it happen, don't do anything
            }
            else {
                // Ensure that it is a number and stop the keypress
                if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) {

                }
                else {
                    event.preventDefault();
                }
            }
4
ответ дан 22 November 2019 в 21:08
поделиться

Вы можете просто использовать простое регулярное выражение JavaScript для проверки чисто числовых символов:

/^[0-9]+$/.test(input);

Это возвращает истину, если ввод числовой, или ложь, если нет.

или для ключевого кода события, простое использование ниже:

     // Allow: backspace, delete, tab, escape, enter, ctrl+A and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
         // Allow: Ctrl+A
        (e.keyCode == 65 && e.ctrlKey === true) || 
         // Allow: home, end, left, right
        (e.keyCode >= 35 && e.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }

    var charValue = String.fromCharCode(e.keyCode)
        , valid = /^[0-9]+$/.test(charValue);

    if (!valid) {
        e.preventDefault();
    }
101
ответ дан 22 November 2019 в 21:08
поделиться

Использовать функцию JavaScript isNaN ,

if (isNaN($('#inputid').val()))

if (isNaN (document.getElementById ('inputid'). Val ()))

if (isNaN(document.getElementById('inputid').value))

Обновление: И вот хорошая статья об этом, но с использованием jQuery: Ограничение ввода в текстовые поля HTML числовыми значениями

43
ответ дан 22 November 2019 в 21:08
поделиться

Вот функция, которую я использую:

// Numeric only control handler
jQuery.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;
            // allow backspace, tab, delete, enter, arrows, numbers and keypad numbers ONLY
            // home, end, period, and numpad decimal
            return (
                key == 8 || 
                key == 9 ||
                key == 13 ||
                key == 46 ||
                key == 110 ||
                key == 190 ||
                (key >= 35 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        });
    });
};

Затем вы можете прикрепить ее к вашему элементу управления, сделав:

$("#yourTextBoxName").ForceNumericOnly();
173
ответ дан 22 November 2019 в 21:08
поделиться

function suppressNonNumericInput(event){

    if( !(event.keyCode == 8                                // backspace
        || event.keyCode == 46                              // delete
        || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
        || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
        || (event.keyCode >= 96 && event.keyCode <= 105))   // number on keypad
        ) {
            event.preventDefault();     // Prevent character input
    }
}
8
ответ дан 22 November 2019 в 21:08
поделиться

Чтобы подробнее рассказать об ответе №3, я бы сделал следующее (ПРИМЕЧАНИЕ: все еще не поддерживает операции вставки с помощью клавиатуры или мыши):

$('#txtNumeric').keypress(
            function(event) {
                //Allow only backspace and delete
                if (event.keyCode != 46 && event.keyCode != 8) {
                    if (!parseInt(String.fromCharCode(event.which))) {
                        event.preventDefault();
                    }
                }
            }
        );
3
ответ дан 22 November 2019 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: