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

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

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

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

И не имеет значения, что значение в этом примере является "true". Если вы попытаетесь "asdf", произойдет одно и то же.

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

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

Мысли?

Edit:

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

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

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

Изменить 2:

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

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

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

Ответы

Ответ 1

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

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

<input required> совпадает с <input required=""> и <input required="honky-tonk">

Так как IE8 не поддерживает html5, это точно так же, как установка атрибута make-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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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