是
![](/icons/11336class.gif)
Name
![](/icons/11336dou.gif)
可不是
注意JavaScript使用
![](/icons/11336de.gif)
是
![](/icons/11336class.gif)
Name去访问
![](/icons/11336class.gif)
属性
![](/icons/11336dou.gif)
![](/icons/11336yinwei.gif)
![](/icons/11336class.gif)
是
![](/icons/11336yi.gif)
个保留关键字
![](/icons/11336dou.gif)
![](/icons/11336yinwei.gif)
将来JavaScript可能开始支持像Java
![](/icons/11336yi.gif)
样
![](/icons/11336de.gif)
类
我们在讨论style属性时遇到了棘手
![](/icons/11336de.gif)
细节问题和浏览器差异性带来
![](/icons/11336de.gif)
麻烦
![](/icons/11336dou.gif)
正如同经历
![](/icons/11336yi.gif)
场惊涛骇浪
![](/icons/11336dou2.gif)
而
![](/icons/11336class.gif)
和id
![](/icons/11336de.gif)
更改则像是沙漠里
![](/icons/11336yi.gif)
片平静
![](/icons/11336de.gif)
绿洲
![](/icons/11336dou.gif)
浏览器们在这里和谐相处
![](/icons/11336dou2.gif)
研究这个例子:
p {
color: #000000; /* black */
}
p.emphasis {
color: #cc0000; /* red */
}
<p id="test">Test</p>
最初
![](/icons/11336dou.gif)
该段落没有定义
![](/icons/11336class.gif)
![](/icons/11336dou.gif)
所以它
![](/icons/11336de.gif)
字体颜色是黑色
![](/icons/11336dou2.gif)
不过
![](/icons/11336dou.gif)
![](/icons/11336yi.gif)
行JavaScript就足以改变它
![](/icons/11336de.gif)
样式:
document.getElementById('test').
![](/icons/11336class.gif)
Name = 'emphasis';
瞬间文字变成了红色
![](/icons/11336dou2.gif)
如果想要改变回来
![](/icons/11336dou.gif)
你可以按如下操作:
document.getElementById('test').
![](/icons/11336class.gif)
Name = '';
你移除了样式
![](/icons/11336dou.gif)
该段落恢复到默认
![](/icons/11336de.gif)
p{}规则
对于
![](/icons/11336yi.gif)
个实际应用中
![](/icons/11336de.gif)
例子
![](/icons/11336dou.gif)
看看“限长
![](/icons/11336de.gif)
文本输入区”
![](/icons/11336dou2.gif)
计数器有这样
![](/icons/11336de.gif)
结构和呈现样式(该结构由JavaScript动态生成
![](/icons/11336dou.gif)
不过那不影响这个例子):
<div
![](/icons/11336class.gif)
="counter"><span>12</span>/1250</div>
div.counter {
font-size: 80%;
padding-left: 10px;
}
span.toomuch {
font-weight: 600;
color: #cc0000;
}
当脚本发现用户输入
![](/icons/11336de.gif)
文字
![](/icons/11336yi.gif)
定达到了最大长度
![](/icons/11336dou.gif)
它修改作为计数器
![](/icons/11336de.gif)
<span>
![](/icons/11336de.gif)
![](/icons/11336class.gif)
为toomuch:
[限长
![](/icons/11336de.gif)
文本输入区
![](/icons/11336dou.gif)
第20~23行]
![](/icons/11336if.gif)
(currentLength > maxLength)
this.relatedElement.
![](/icons/11336class.gif)
Name = 'toomuch';
this.relatedElement.
![](/icons/11336class.gif)
Name = '';
现在
![](/icons/11336dou.gif)
作为计数器
![](/icons/11336de.gif)
<span>字体变成粗体和红色
id
![](/icons/11336de.gif)
变更以几乎完全
![](/icons/11336yi.gif)
样
![](/icons/11336de.gif)
方式工作:
p {
color: #000000; /* black */
}
p#emphasis {
color: #cc0000; /* red */
}
<p>Test</p>
document.getElementsByTagName('p')[0].id = 'emphasis';
该段落
![](/icons/11336de.gif)
文字再次变成了红色
![](/icons/11336dou2.gif)
但是
![](/icons/11336dou.gif)
我建议你不要过多改变id
![](/icons/11336dou2.gif)
除了作为CSS
![](/icons/11336de.gif)
钩子
![](/icons/11336dou.gif)
它们也常常作为JavaScript
![](/icons/11336de.gif)
钩子
![](/icons/11336dou.gif)
改变它们可能存在不确定
![](/icons/11336de.gif)
副作用
增加
通常
![](/icons/11336dou.gif)
你不会给
![](/icons/11336yi.gif)
个元素
![](/icons/11336de.gif)
![](/icons/11336class.gif)
设置新值
![](/icons/11336dou.gif)
而只是添加
![](/icons/11336yi.gif)
个
![](/icons/11336class.gif)
![](/icons/11336dou2.gif)
![](/icons/11336yinwei.gif)
你不希望移除元素已经拥有
![](/icons/11336de.gif)
任何样式
![](/icons/11336dou2.gif)
![](/icons/11336yinwei.gif)
CSS允许复合样式
![](/icons/11336dou.gif)
新
![](/icons/11336class.gif)
所包含
![](/icons/11336de.gif)
样式被添加到元素上
![](/icons/11336dou.gif)
不会移除任何已经存在
![](/icons/11336de.gif)
![](/icons/11336class.gif)
![](/icons/11336de.gif)
CSS指令
“表单验证”中
![](/icons/11336de.gif)
writeError
![](/icons/11336kh.gif)
和removeError
![](/icons/11336kh.gif)
![](/icons/11336hanshu.gif)
是
![](/icons/11336yi.gif)
个很好
![](/icons/11336de.gif)
例子
![](/icons/11336dou2.gif)
![](/icons/11336yi.gif)
般来说我会给表单域应用好几个
![](/icons/11336class.gif)
![](/icons/11336dou.gif)
![](/icons/11336yinwei.gif)
图形设计师经常对输入框使用两个甚至 3个宽度
![](/icons/11336dou2.gif)
当
![](/icons/11336yi.gif)
个表单域包含
![](/icons/11336cuowu.gif)
![](/icons/11336de.gif)
时候
![](/icons/11336dou.gif)
我希望添加
![](/icons/11336yi.gif)
个特别
![](/icons/11336de.gif)
警告样式
![](/icons/11336dou.gif)
但我不希望搅乱该元素已经拥有
![](/icons/11336de.gif)
样式
![](/icons/11336dou2.gif)
所以
![](/icons/11336dou.gif)
我不能简单地覆盖旧
![](/icons/11336de.gif)
![](/icons/11336class.gif)
值
![](/icons/11336dou.gif)
那样我将失去已经指定
![](/icons/11336de.gif)
宽度
看这样
![](/icons/11336de.gif)
情形:
<input
![](/icons/11336class.gif)
="smaller" name="name" />
input.smaller {
width: 75px;
}
input.errorMessage {
border-color: #cc0000;
}
最开始
![](/icons/11336dou.gif)
输入框
![](/icons/11336de.gif)
宽度是75px
![](/icons/11336dou2.gif)
如果脚本设置
![](/icons/11336class.gif)
为'errorMessage'并且删除旧值
![](/icons/11336dou.gif)
表单域会得到
![](/icons/11336yi.gif)
个红色
![](/icons/11336de.gif)
边框
![](/icons/11336dou.gif)
但也失去了它
![](/icons/11336de.gif)
宽度
![](/icons/11336dou.gif)
而那样
![](/icons/11336de.gif)
话可能会让用户感到非常迷惑
因此
![](/icons/11336dou.gif)
我是添加了errorMessage
![](/icons/11336class.gif)
:
[表单验证
![](/icons/11336dou.gif)
第105~106行]
function writeError(obj,message) {
obj.
![](/icons/11336class.gif)
Name
![](/icons/11336jiadeng.gif)
' errorMessage';
这段代码取得已存在
![](/icons/11336de.gif)
![](/icons/11336class.gif)
Name并在其后附加
![](/icons/11336yi.gif)
个新
![](/icons/11336de.gif)
![](/icons/11336class.gif)
![](/icons/11336dou.gif)
在它的前加
![](/icons/11336yi.gif)
个空格
![](/icons/11336dou2.gif)
这个空格分隔新
![](/icons/11336de.gif)
![](/icons/11336class.gif)
和任何对象可能已经拥有
![](/icons/11336de.gif)
![](/icons/11336class.gif)
值
![](/icons/11336dou2.gif)
现在输入框除了拥有75px宽度的外
![](/icons/11336dou.gif)
如我们所愿地得到了红色边框
![](/icons/11336dou2.gif)
该表单域现在应用了两个
![](/icons/11336class.gif)
![](/icons/11336dou.gif)
HTML就好像这样:
<input
![](/icons/11336class.gif)
="smaller errorMessage" name="name" />
Class在Mozilla中
![](/icons/11336de.gif)
名称和空白
你可能注意到removeError
![](/icons/11336kh.gif)
移除
![](/icons/11336class.gif)
![](/icons/11336de.gif)
值errorMessage
![](/icons/11336de.gif)
时候没有前置
![](/icons/11336de.gif)
空格
![](/icons/11336dou2.gif)
那是
![](/icons/11336yinwei.gif)
![](/icons/11336yi.gif)
个浏览器
![](/icons/11336de.gif)
bug
![](/icons/11336dou2.gif)
当你添加errorMessage到
![](/icons/11336yi.gif)
个原来没有值
![](/icons/11336de.gif)
![](/icons/11336class.gif)
![](/icons/11336de.gif)
时候
![](/icons/11336dou.gif)
Mozilla会删除前置空格
![](/icons/11336dou2.gif)
如果我们随后执行replace(/ errorMessage/,'')
![](/icons/11336dou.gif)
Mozilla不能移除
![](/icons/11336class.gif)
![](/icons/11336dou.gif)
它找不到
![](/icons/11336zifu.gif)
串errorMessage
![](/icons/11336dou.gif)
![](/icons/11336yinwei.gif)
前置空格已经不在了
移除
![](/icons/11336yi.gif)
旦用户修正了她
![](/icons/11336de.gif)
![](/icons/11336cuowu.gif)
![](/icons/11336dou.gif)
![](/icons/11336class.gif)
![](/icons/11336de.gif)
值errorMessage应该被移除
![](/icons/11336dou.gif)
但任何原来
![](/icons/11336de.gif)
![](/icons/11336class.gif)
![](/icons/11336dou.gif)
比如smaller
![](/icons/11336dou.gif)
不应该受到影响
![](/icons/11336dou2.gif)
removeError
![](/icons/11336kh.gif)
![](/icons/11336hanshu.gif)
提供了这个功能:
[表单验证
![](/icons/11336dou.gif)
第119~120行]
function removeError
![](/icons/11336kh.gif)
{
this.
![](/icons/11336class.gif)
Name = this.
![](/icons/11336class.gif)
Name.replace(/errorMessage/,'');
它先取得元素
![](/icons/11336de.gif)
![](/icons/11336class.gif)
然后替换
![](/icons/11336zifu.gif)
串'errorMessage'为''(
![](/icons/11336yi.gif)
个空
![](/icons/11336zifu.gif)
)
![](/icons/11336dou2.gif)
errorMessage从
![](/icons/11336class.gif)
![](/icons/11336de.gif)
值中被取走
![](/icons/11336dou.gif)
但对其他
![](/icons/11336de.gif)
值没有影响
![](/icons/11336dou2.gif)
表单域失去了红色
![](/icons/11336de.gif)
边框颜色
![](/icons/11336dou.gif)
但依然维持75px
![](/icons/11336de.gif)
宽度
延伸阅读
最新评论