Могу ли я проверять и предотвращать превышение чисел определенного значения для разных входных данных с помощью одной функции?

#javascript #validation

#javascript #проверка

Вопрос:

Я использую этот скрипт:

 let validate = function(e) {
  let t = e.value;
  e.value = (t.indexOf(".") >= 0) ? (t.substr(0, t.indexOf("."))   t.substr(t.indexOf("."), 4)) : t;
}
  

И, честно говоря, я понимаю, что в первой части говорится, что нам нужно число или 0, не уверен на 100%, что такое вторая часть, но третья часть ограничивается 3 знаками после запятой. Но я также хотел бы добавить предложение о том, что число выше 150 также не может быть добавлено (но может иметь 149,999). Возможно ли это с помощью этого?

Если бы я хотел иметь разные проверки для 7 разных входных данных (например, некоторые могут иметь числа до 10, тогда как другие могут иметь числа только меньше 1, а другие до 150). Должен ли я создавать отдельную проверку для каждого из этих входных данных или я могу как-то прикрепить их сюда через их #ID?

Комментарии:

1. e.value = Math.min(e.value, 150) ;

Ответ №1:

e кажется, ввод. Итак, у вас разные возможности

  1. имейте фиксированный набор правил для каждого из ваших входных данных в функции проверки

      function validate(e) {
       switch (e.id) {
         case "input_1":
           //do validiations for input 1
           break;
         case "input_2":
           //do validation for input 2
           break;
         default:
           //no rules for all others 
           break;
       }
     }
      
  2. создайте более общий подход с набором возможных ограничений

     <input type="number" data-maxvalue="150"/>
    <input type="number" data-maxdigits="3"/>
    <input type="number" data-minvalue="5" data-maxvalue="10"/>
    
    function validate(e) {
       if (e.dataset.minvalue amp;amp;  (e.value) <  (e.dataset.minvalue)) {
         e.value =  (e.dataset.minvalue)
       }
       if (e.dataset.maxvalue amp;amp;  (e.value) >  (e.dataset.maxvalue)) {
         e.value =  (e.dataset.maxvalue)
       }
       if (e.dataset.maxdigits) {
         var t = e.value;
         e.value = (t.indexOf(".") >= 0) ? (t.substr(0, t.indexOf("."))   t.substr(t.indexOf("."),  (e.dataset.maxdigits) 1)) : t;          
       }
       ...
    }
      
  3. Используйте встроенную проверку формы, которая может охватывать ваши варианты использованияhttps://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation

      <input type="number" required max="150" min="10" step="0.001">
      

Комментарии:

1. Я поддерживаю этот ответ, в частности, 3-ю возможность, поскольку при этом используется встроенная проверка.

2. Определенно второй ответ! Я собираюсь попробовать это позже сегодня. Третье неэффективно, потому что у меня type=»text», потому что number где-то выдал ошибки (я не могу вспомнить, где, но это было). Спасибо, я дам вам знать, как это происходит, когда я попытаюсь, а затем выберите это в качестве ответа, если это сработает 🙂

3. @PaulDavis Если вы ожидаете, что на ваших входных данных будут цифры, вам следует окончательно попробовать использовать type="number" . Если вам нужно использовать type="text" , хотя на самом деле это число, вам следует изучить эту проблему. Возможно, у вас проблема с вашими данными…

4. Я не могу вспомнить, в чем была проблема сейчас, я попытаюсь вернуть ее обратно в number, возможно, я исправил проблему где-то по ходу. Я попробую

5. Я пытаюсь в JSBin — все это работает, кроме максимальных цифр jsbin.com/wulocav/edit?html ,js, вывод

Ответ №2:

Вы определенно можете добавить еще одну строку кода в функцию проверки, чтобы проверить, превышает ли значение 150, и зафиксировать его:

 if (e.value > 150)
    e.value = 150;
  

Я не знаю, как вы вызываете функцию validate, но максимальное значение может быть установлено с использованием второго аргумента функции ( let validate = function(e, max) ).

Комментарии:

1. Использование oninput=»validate(this)»