function validateForm(){ var x = document.forms[0].elements; for (var i=0;i<x.length;i++) { if ([这个输入域是必填的] && !x[i].value) // notify user of error }} 我们需要创建怎样的触发器才能告诉这个脚本哪些输入域是必填的呢?显然用id是不行的:理想的解决方案应该可以对一大堆输入域起作用。很自然的我们会想到是否可以用class来触发行为:
var x = document.getElementsByTagName("textarea");for (var i=0;i<x.length;i++){ if ([这个文本输入框有长度上限]) x[i].onkeypress = checkLength;}function checkLength(){ var max = [读取长度上限的值]; if (this.value.length > max) // notify user of error} 这段脚本需要两个关键的信息:
function validateForm(){ var x = document.forms[0].elements; for (var i=0;i<x.length;i++) { if (x[i].getAttribute("required") && !x[i].value) // notify user of error }}var x = document.getElementsByTagName("textarea");for (var i=0;i<x.length;i++){ if (x[i].getAttribute("maxlength")) x[i].onkeypress = checkLength;}function checkLength(){ var max = this.getAttribute("maxlength"); if (this.value.length > max) // notify user of error} 依我看来,这种方案很容易实现,而且与JavaScript触发器应有的形式一致:一对“变量名/值”提供了触发器的名字和脚本所需的值,它同时允许你针对每一个元素个体定义行为。最后,这种向XHTML添加触发器的方式对于初学者来说也是相当简单的。
解决方案就是让它们合法:定义一个自定义的文档类型定义(Document TYpe Definition,DTD),把XHTML作一个小小的扩展,使它包含我们定义的属性。这个自定义的DTD定义了新增的属性以前它们应该出现的正确位置,然后校验器就会按我们自定义的XHTML口味来校验文档。如果DTD说这些属性是正确的,那它们就是正确的。