Я пытаюсь проверить ввод с использованием JavaScript, я хочу, чтобы вывести предупреждение, если пользователь вводит что-то, что не входит в мой массив.
Вот что я до сих пор
var validAr = ["1","2","3","4","5","6","7","8","9","10","m","M"];
//dont mind the i it been previously declared
val =+ document.getElementById('arrow_' + i + '_1').value
alert(val);
alert(validAr.indexOf(val));
Если, например, в приведенном выше примере пользователь вводит "5", я буду предупреждать "5", значение val
а затем -1, что означает, что он не принадлежит массиву. Как я могу это решить?
Ваш массив содержит строки, но вы преобразовываете значение в число:
val = +document.getElementById('arrow_'+i+'_1').value
// ^ Remove this to keep the value as a string
Поскольку Array.prototype.indexOf
выполняет строгое сравнение равенства, он не может найти значение в массиве.
Вы можете заменить значения вашего массива на фактические числа, но поскольку "m"
и "M"
не будут преобразовываться в числа, это не сработает (в итоге вы получите NaN
когда вы попытаетесь их принудить).
просто преобразуйте свое значение в строку
alert(validAr.indexOf(val.toString()));
а также удалите + из +document.getElementById('arrow _' + я + '_ 1'). значение
поэтому ваш код будет
var validAr = ["1","2","3","4","5","6","7","8","9","10","m","M"];
//dont mind the i it from a for above
val = document.getElementById('arrow_'+i+'_1').value;
alert(val);
alert(validAr.indexOf(val.toString()));
пытаться
$(document).ready(function () {
var validAr = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "m", "M"];
$("#text").change(function () {
if (jQuery.inArray($(this).val(), validAr) == -1) {
alert("exception");
}
});
});
<input type="text" id="text" />
Когда вы используете jQuery, вы можете:
if (jQuery.inArray(val,validAr)==-1)
{
alert('Invalid');
}