布尔HTML属性

时间:2009-04-01 16:37:21

标签: javascript html dom dhtml

HTML中有一些属性是“布尔” - 如果存在,浏览器会将它们视为“真”,无论值是多少。 <option>标记上的选择是此类属性的一个示例。另一个是<input type="checkbox"> 已检查

如果你有setAttribute()这样的属性,似乎没有值可以设置为让浏览器始终如一,就好像缺少属性一样。

例如

option.setAttribute("selected", false)

仍会标记所选的选项。 null ,空字符串或未定义也不起作用。如果有人知道我可以设定的价值来实现我的目标,请告诉我,但我认为不存在。 (由于我使用了一些框架代码,调用setAttribute()或调用removeAttribute()很困难。)

我正试图找到这些属性的详尽列表。这是我到目前为止所做的:

  • 已选择 <option>
  • 已检查 <input>
  • {li> 已停用只读 <input><select><option><optgroup><button><textarea>
  • 多个 <select>

请帮我填写此列表 - 或者将我指向现有列表。

5 个答案:

答案 0 :(得分:24)

  

(由于我使用的一些框架代码,不调用setAttribute(),或调用removeAttribute()很困难。)

然后我会提交框架代码需要修复或转储。

您无法通过设计将setAttribute设置为取消设置属性。如果碰巧在任何特定的浏览器中工作,那么您发现任何涉及带外值的解决方案(如“null”)将根据DOM Core标准完全无效。

在任何情况下,最好在浏览器(非XML)HTML上下文中避免使用setAttribute()。 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)

答案 1 :(得分:3)

尝试removeAttribute

option.removeAttribute("selected");

编辑:阅读完评论后,请阅读有关setAttribute的this。值得注意的是:

  

即使getAttribute()为缺少的属性返回null,也应该使用removeAttribute()而不是elt.setAttribute(attr,null)来删除属性。

答案 2 :(得分:2)

表格单元格,例如TD,TH

nowrap

用于记录,可以更改像check(在复选框/无线电元素上)的属性。

myCheckBoxElem.checked = true|false;

myCheckBoxElem.checked = !myCheckBoxElem.checked;//toggles to the opposite state

答案 3 :(得分:1)

你不能只使用removeAttribute()吗?

答案 4 :(得分:1)

不完全是您要问的内容,但'class'和'for'属性都会收到不同的DOM名称

element.className
element.htmlFor