Булевы атрибуты HTML - PullRequest
       8

Булевы атрибуты HTML

16 голосов
/ 01 апреля 2009

В HTML есть некоторые атрибуты, которые являются «логическими» - браузеры обрабатывают их как «true», если они присутствуют, независимо от значения. Примером такого атрибута является selected для тега <option>. Другой проверено на <input type="checkbox">.

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

Например

option.setAttribute("selected", false)

будет по-прежнему отмечать выбранную опцию. null , пустая строка или undefined тоже не работают. Если кто-то знает значение, которое я могу установить для достижения своей цели, пожалуйста, дайте мне знать, но я не думаю, что оно существует. (Из-за некоторого кода структуры, который я использую, не вызывает setAttribute() или вызывает removeAttribute() сложно.)

Я пытаюсь найти исчерпывающий список таких атрибутов для особых случаев их. Вот что у меня так далеко:

  • выбрано из <option>
  • проверено из <input>
  • отключено , только для чтения из <input>, <select>, <option>, <optgroup>, <button>, <textarea>
  • несколько из <select>

Пожалуйста, помогите мне заполнить этот список - или укажите мне существующий.

Ответы [ 5 ]

24 голосов
/ 02 апреля 2009

(Из-за некоторого кода фреймворка, который я использую, трудно вызвать setAttribute () или removeAttribute ().)

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

Вы не можете установить атрибут для сброса атрибута в соответствии с дизайном. Любое найденное вами решение, включающее внеполосные значения, такие как «null», если оно работает в каком-либо конкретном браузере, было бы совершенно недопустимым в соответствии со стандартом DOM Core.

setAttribute () в любом случае лучше избегать в контекстах HTML браузера (не XML). IE pre-8 не знает разницы между атрибутом DOM и свойством JavaScript, что может легко привести ко многим действительно странным проблемам. Если вы пытаетесь установить «флажок» в качестве атрибута (что теоретически вы должны сделать, установив для него строку «флажок»), не ожидайте, что IE будет сотрудничать.

Полный список логических атрибутов в HTML 4.01 (и, следовательно, XHTML 1.0) (с именами свойств, где они различаются в регистре):

checked             (input type=checkbox/radio)
selected            (option)
disabled            (input, textarea, button, select, option, optgroup)
readonly            (input type=text/password, textarea)
multiple            (select,input)
ismap     isMap     (img, input type=image)

defer               (script)
declare             (object; never used)
noresize  noResize  (frame)
nowrap    noWrap    (td, th; deprecated)
noshade   noShade   (hr; deprecated)
compact             (ul, ol, dl, menu, dir; deprecated)
3 голосов
/ 01 апреля 2009

Попробуйте Удалить атрибут :

option.removeAttribute("selected");

РЕДАКТИРОВАТЬ: Прочитав ваш комментарий, прочитайте это о setAttribute. В частности:

Несмотря на то, что getAttribute () возвращает null для отсутствующих атрибутов, вы должны использовать removeAttribute () вместо elt.setAttribute (attr, null) для удаления атрибута.

2 голосов
/ 01 апреля 2009

в ячейках таблицы, например ТД, ТД

nowrap

для записи, чтобы изменить атрибуты, такие как отмеченные (на флажках / радиоэлементах), вы можете сделать.

myCheckBoxElem.checked = true|false;

или

myCheckBoxElem.checked = !myCheckBoxElem.checked;//toggles to the opposite state
1 голос
/ 01 апреля 2009

Не совсем то, о чем вы спрашиваете, но атрибуты 'class' и 'for' получают разные имена DOM

element.className
element.htmlFor
1 голос
/ 01 апреля 2009

Разве вы не можете просто использовать removeAttribute()?

...