Почему проверка jQuery разрешает номера с десятичной точкой в ​​конце в поле чисел? Это ошибка? [Дубликат]

Как было сказано многими хорошими ответами, объект должен реализовать Iterable interface, если он хочет использовать цикл for-each.

Я отправлю простой пример и попытаюсь объяснить в другом как работает цикл for-each.

Пример цикла for-each:

public class ForEachTest {

    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();
        list.add("111");
        list.add("222");

        for (String str : list) {
            System.out.println(str);
        }
    }
}

Затем, если мы используем javap для декомпиляции этого класса, мы получим это Пример байт-кода:

public static void main(java.lang.String[]);
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=1
         0: new           #16                 // class java/util/ArrayList
         3: dup
         4: invokespecial #18                 // Method java/util/ArrayList."<init>":()V
         7: astore_1
         8: aload_1
         9: ldc           #19                 // String 111
        11: invokeinterface #21,  2           // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
        16: pop
        17: aload_1
        18: ldc           #27                 // String 222
        20: invokeinterface #21,  2           // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
        25: pop
        26: aload_1
        27: invokeinterface #29,  1           // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;

Как видно из последней строки образца, компилятор автоматически преобразует использование ключевого слова for-each в использование Iterator во время компиляции. Это может объяснить, почему объект, который не реализует Iterable interface, будет генерировать Exception, когда он пытается использовать цикл for-each.

0
задан DreamTeK 15 May 2014 в 10:33
поделиться

3 ответа

Числовое поле выполняет свою собственную проверку, если оно содержит нечисловой символ, значение будет автоматически удалено до тех пор, пока не будет задано правильное значение. Вы можете увидеть это с помощью console.log(value).

Итак, вы также можете проверить пустую строку

function check(value, msg) {
  var valid = ((value != '') && /^\d*\.?\d*$/.test(value));    
  if (valid) {
      document.getElementById(msg).style.display = "none";
  } else {
      document.getElementById(msg).style.display= "inline";
  }
  return valid;
}

http://jsfiddle.net/EkL3k/6 /

1
ответ дан MLeFevre 3 September 2018 в 16:45
поделиться

RegEx не работает, потому что возвращаемое значение является числом , а не строкой . Он работает «как ожидалось», когда вы принудительно возвращаете значение в строковый формат:

var valid = /^\d*\.?\d*$/.test(String(value));

Возможно, вы захотите прочитать . Как получить исходное значение & lt; input type = & quot; number & quot; & GT; поле? , поскольку он предполагает, что вы не имеете для проверки входа type=number.

0
ответ дан Community 3 September 2018 в 16:45
поделиться

добавьте этот код и добавьте идентификатор к вашему входу.

$(document).ready(function() {
$("#txtboxToFilter").keydown(function (e) {
    // Allow: backspace, delete, tab, escape, enter 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;
    }
    // Ensure that it is a number and stop the keypress
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
        e.preventDefault();
    }
});
});

http://codepen.io/anon/pen/IDEGu

0
ответ дан Tal Shaked 3 September 2018 в 16:45
поделиться
Другие вопросы по тегам:

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