Подтвердить что ты не робот

Можно ли пометить поле недействительным из javascript?

Из чтения этого сообщения я обнаружил, что есть несколько псевдо классов для недопустимых входных значений и недопустимых значений.

Есть ли способ отметить поле ввода как недопустимое/действительное из javascript? Или, альтернативно, могу ли я переопределить используемый метод проверки?

4b9b3361

Ответ 1

Можно ли указать поле ввода как недействительное/действительное из JavaScript?

К сожалению, вы не можете стилизовать псевдо классы в JavaScript, так как они не являются реальными элементами, они не существуют в фактической DOM.

С помощью ванильного JavaScript вы должны использовать API проверки.

В jQuery вы можете просто сделать это, http://jsfiddle.net/elclanrs/Kak6S/

if ( $input.is(':invalid') ) { ... }

Или, альтернативно, могу ли я переопределить используемый метод проверки?

Если вы используете проверку HTML5, придерживайтесь разметки. В противном случае вы можете отключить проверку HTML5 с помощью $form.attr('novalidate', 'novalidate') и использовать JS для проверки своих полей, а затем при необходимости добавить классы valid или invalid. Я создал плагин, который работает так, чтобы поддерживать браузеры без HTML5.

Ответ 2

Для этой цели вы можете использовать функцию customValidity.

Если вы добавите в поле пользовательское значение Validity, оно станет недействительным. Когда вы устанавливаете сообщение как пустую строку, оно снова становится действительным (если оно недействительно по другим причинам).

field.setCustomValidity("Invalid field."); сделает поле недействительным.

field.setCustomValidity(""); сделает поле действительным, если оно не завершит ограничение HTML5.

Ответ 3

Edit: Кто-то пояснил, что вы ищете "действительные" "недопустимые" атрибуты для DOM.

Я бы добавил атрибуты для каждого тега, используя dom_object.setAttribute("isvalid", "true"). Вы также можете иметь центральную функцию проверки, которая каждый раз обновляет эти атрибуты (и каждый раз используйте dom_object.getAttribute("isvalid")).

Вы можете запускать эту функцию каждый раз, когда элемент теряет фокус, или когда захотите.

Не совсем элегантный, но, к сожалению, нет поддержки "псевдо" с javascript и HTML5.


Если я понимаю ваш вопрос, вы можете сделать проверку с помощью Javascript. Однако следует предупредить, что очень легко обойти проверку на стороне клиента, особенно проверку валидации JavaScript. Вы никогда не должны доверять данным клиента и всегда выполняете проверку на стороне сервера.

Например, я мог легко найти идентификаторы элементов, проверив исходный код, а затем document.getElementById('some_id').setAttribute('max', new_number), чтобы изменить максимальное значение (это была одна из записей из вашей ссылки).

Существуют различные способы сделать это, поэтому я постараюсь дать вам общую идиому.

Вы можете захватить значение, выполнив document.getElementById('form_element_id').value (убедитесь, что вы даете форму a name, которая отправляется на сервер, и id, которая используется javascript). Для текстовых полей вы можете использовать .innerHTML.

Тогда у вас есть значение в переменной, есть несколько способов проверить его.

Например, вы можете сделать if (parseInt(my_value) < 0) //error. Вы также можете использовать регулярные выражения, я не буду все объяснять, но вы можете начать здесь http://www.w3schools.com/jsref/jsref_obj_regexp.asp. Я знаю, что w3schools - не лучший источник, но я считаю, что это хорошее место для начала.

Теперь для части проверки: добавьте onsubmit="return validateForm() в тег формы, где validateForm() - это функция, которая выполняет всю проверку. И функция просто возвращает true, если она действительна, и false в противном случае. Этот переопределяет функцию проверки по умолчанию (которая по умолчанию ничего не делает).

Итак, в приведенном выше примере //error будет заменен на return false. Вы можете делать и другие вещи; например, предупредить ошибку, а затем вернуть false. Вы также можете использовать javascript для выделения недопустимых полей (не уверен, что это то, что вы подразумеваете под " отмечаете поле ввода как недопустимое/действительное из javascript)

Конечно, если вы не хотите проверять все поля, вам нужно вернуть только true, если некоторые из них пройдут. Опять же, вы не должны полагаться на это, но если вы только для того, чтобы сдерживать средних людей, тогда это простое решение.