jba1991 Ответов: 2

jQuery validator позволяет использовать только точки (.) и числа


Привет,

У меня есть вход, где пользователи могут сделать ставку на определенную сумму денег.

в настоящее время он позволяет пользователю вводить числа, но не разделитель точек.

Это мой код jQuery:

$().ready(function() {
	//validate register form on keyup and submit
	$("#postItem").validate({
		rules:{
			itemName:{
				required: true,
				minlength: 5
			},
			itemDesc:{
				required: true,
				minlength: 30
			},
			startBid: {
				required: true,
				digits: true
			},
		},
		messages: {
			itemName: {
				required: "Please provide a name for your item",
				minlength: "The item name must be longer than 4 characters<br>"
			},
			itemDesc:{
				required: "You need to provide a description of your item",
				minlength: "The description needs to be more than 30 characters<br>"
			},
			startBid:{
				required: "A starting bid amount is required",
				digits: "Only numerical values allowed"
			},
		},
	});

});

Есть ли какое-то другое правило, кроме цифр, которое я могу использовать?

Sergey Alexandrovich Kryukov

Что значит "есть"? Вам не нужно использовать какие-либо предопределенные правила. Зачем вообще использовать валидацию?
—СА

jba1991

К сожалению, я еще не очень хорошо знаком с jQuery. Но я использую его для проверки на стороне клиента для проекта, Я хочу предотвратить отправку формы, если во входных данных формы есть недопустимые символы(все символы, кроме 0-9 и.).

Sergey Alexandrovich Kryukov

Здесь нет проблем с jQuery. В вашем случае гораздо лучше просто отфильтровать наши нежелательные символы из входных данных. Пожалуйста, посмотрите мой ответ. Примеры кода, на которые ссылается статья, показывают, что они действительно работают.

Но не пытайтесь сделать его более сложным (например, в зависимости от фильтра уже введенного текста, позиции каретки и т. д., Это было бы совершенно запутанно). Если у вас есть более сложные правила проверки, делайте это поверх фильтрации, только в тот момент, когда пользователь пытается использовать данные ("отправить" или что-то в этом роде). Разве это не разумно?

Поэтому я предлагаю вам воспользоваться моим советом и формально принять решение 1.
Во всех случаях ваши последующие вопросы будут приветствоваться.

—СА

2 Ответов

Рейтинг:
2

Sergey Alexandrovich Kryukov

Пожалуйста, ознакомьтесь с моими комментариями к этому вопросу. Вместо проверки вы можете просто отфильтровать нежелательные символы и разрешить все, что захотите. Этот краткий учебник объясняет все: http://www.javascripter.net/faq/keyboardinputfiltering.htm.

[РЕДАКТИРОВАТЬ]

Вы можете обрабатывать любые символы и / или нажатия клавиш.
У вас есть какие-то дополнительные символы или ключи для проверки? Просто сделай это. Если вы не хотите возиться с регулярным выражением, вычислите его в отдельном выражении и соедините в логическое выражение под вашим "если".

Точка есть:

For keypress: event.charCode == 46; event.which == 46;
For keyup: event.keyCode == 190; event.which == 190;


Вы также должны убедиться, что разрешили backspace:
For keypress: event.keyCode == 8; event.which == 8;
For keyup: event.keyCode == 8; event.which == 8;

Не то event.keyCode и event.charCode это разные вещи. Не все ключи имеют символы, связанные с ними.

Как узнать все эти факты? Используйте эту тестовую страницу: http://www.asquare.net/javascript/tests/KeyCode.html.

—СА


jba1991

Это кажется полезным.

в этом коде:

метода onkeypress="if(эта.значение.матч(/\Д/)) это.значение=это.значение.заменить(/\Д/Г,")"
метода onkeyup ="if(эта.значение.матч(/\Д/)) это.значение=это.значение.заменить(/\Д/Г,")"

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

Sergey Alexandrovich Kryukov

Проверьте и это тоже. Если вы не хотите возиться с регулярным выражением, вычислите его в отдельном выражении и соедините в логическое выражение под вашим "если".

Точка есть:
Для нажатия клавиши: event. charCode = = 46; event.который = = 46;
Для keyup: event. keyCode == 190;; event.который = = 190;

Вы также должны убедиться, что разрешили backspace:
Для нажатия клавиши: event. keyCode == 8; event.который = = 8;
Для keyup: event. keyCode == 8;; event.который = = 8;

Не то чтобы event. keyCode и даже. charCode-это разные вещи. Не все ключи имеют символы, связанные с ними.

Как узнать все эти факты? Пожалуйста, смотрите обновление моего ответа после [EDIT]. Используйте последнюю ссылку, которую я вам предоставил.

—СА

jba1991

как реализовать события keypress и keyup в коде jQuery?

Sergey Alexandrovich Kryukov

Я ответил в решении 2.
Пожалуйста, вы собираетесь понять идею и принять ответ формально?
Думаю, я объяснил вам все, что нужно. :-)
—СА

Рейтинг:
2

Sergey Alexandrovich Kryukov

спросил jba1991:

как реализовать события keypress и keyup в коде jQuery?
Вы можете реализовать его, как и многое другое, начиная с чтения оригинальной документации:
https://api.jquery.com/keydown[^],
https://api.jquery.com/keyup[^],
https://api.jquery.com/keypress[^].

—СА