Установка атрибута с именем "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
Ответ 2
Вы можете использовать prop для этого:
$("#elementId").prop("required", true);
Соответствующая документация: http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-
Ответ 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');