Установка атрибута с именем «required» и любое значение с JQuery не работает

Это не работает:

$("#elementId").attr("required", "true"); 

Как в Chrome, так и в Firefox, DOM создает либо required атрибут (без значения), либо required="" (пустое значение).

И не имеет значения, что значение в этом примере является «истинным». Если вы попробуете «asdf», произойдет одно и то же.

Что странно, я полагаю, что это работало, потому что этот новый код является частью большого проекта, который продолжается уже несколько лет.

Единственное, о чем я могу думать, это то, что мои Chrome (v10) и Firefox (v4) теперь достаточно продвинуты, что они признают требуемый атрибут в качестве зарезервированного ключевого слова HTML5. Я добавил атрибут novalidate , считая, что это может отключить HTML5- версию , связанную с формами . Нет такой удачи.

Мысли?

Редактировать:

Чтобы прояснить это, это происходит только с JQuery. Если я скажу это, он будет работать:

 $("#elementId")[0].setAttribute("required", "true"); 

Есть ли ошибка в JQuery? Любая идея, почему это происходит только с JQuery? Наша команда разработчиков любит, когда это возможно, весь код, через JQuery. Я могу использовать прямой метод setAttribute JavaScript, но лучше использовать JQuery-решение, которое работает.

Изменить 2:

Суть дела в том, что …

Почему использование метода attr() JQuery не работает, когда выполняется обычный setAttribute() ? Не вызывает setAttribute() метод attr() setAttribute() в какой-то момент ниже?

Это то, что так запутанно. Chrome и Firefox идеально подходят для установки required="true" если вы используете setAttribute ().

Это действительно браузер. Я проверил в IE8, и он применит любое строковое значение, которое вы установите для требуемого атрибута.

Поскольку вам не нужно какое-либо значение (должен присутствовать только атрибут), это не повлияет на поведение по умолчанию. Если вы злоупотребляете значением атрибута для javascript-крючков, это другое:

совпадает с и

Поскольку IE8 не поддерживает html5, это точно так же, как установка атрибута $("input").attr("derp", "derty") -up, поэтому вы можете установить $("input").attr("derp", "derty") и он назначил его элементу.

Я предполагаю, что jquery использует required="" для людей, которые хотят использовать это в строгом синтаксисе XHTML, но все еще соответствуют стандартам HTML5.

http://dev.w3.org/html5/spec/Overview.html#the-required-attribute

http://dev.w3.org/html5/spec/Overview.html#boolean-attribute

Вы можете использовать prop для достижения этого:

 $("#elementId").prop("required", true); 

Соответствующая документация: http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-

Как я получил эту работу, было реализовать следующий старый добрый javascript вместо jQuery :

 document.getElementById("inputid").required = true; 

или, (очевидно)

 document.getElementById("inputid").required = false; 

в зависимости от требований.

Источник моего решения здесь.

Я прочитал страницы .attr () и .prop () в jQuery API, и, похоже, нет поддержки «обязательного» атрибута, но я открыт для исправления.

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

 $("#elementId").attr("required", "required"); 

Примечание. Я пробовал это, но я не мог заставить его работать:

 $("#elementId").attr("required"); 

Несмотря на то, что в настоящее время требуется атрибут boolean, просто добавление имени атрибута (без значения) не кажется слишком совместимым с различными версиями разных браузеров. Придерживайтесь моего первоначального примера выше, и все должно быть в порядке.

Для ввода требуется, он работает намного лучше, если вы удалите атрибут или установили его на false

 $('#elementId').removeAttr('required');