Re: [VE][108] Add Subject Here

Osama Othman wrote:

> Validating http://75.125.45.250/pages/SearchResults.aspx?Text=a
> <http://75.125.45.250/pages/SearchResults.aspx?Text=a&key=all%7C10%7Ca%7Csam
> e%7Casc> &key=all%7C10%7Ca%7Csame%7Casc
> Error [108]: "there is no attribute X"

The page declares the XHTML 1.0 Transitional document type. This explains 
the error messages about "&" characters inside script elements, since by 
XHTML rules, "&" as data character must be escaped (e.g. as &amp;). The 
safest way is to put the scripts in an external file.

The error message 'there is no attribute "disabled"' is caused by the 
presence of the attribute in an <a> tag, where XHTML 1.0 does not allow it. 
You might consider moving to HTML5 (possibly in the XHTML serialization 
XHTML5), though it is a moving target and "validation" for it means 
performing heuristic checks using an experimental feature of the W3C 
Validator.

Alternatively, or additionally, you might consider not using that attribute 
at all in markup. Instead, you can assign a value to the corresponding 
property, or "IDL attribute", of an element, in JavaScript, e.g. with 
assignments like document.getElementById("foobar").disabled = true in code 
that gets executed via an onload="..." attribute in <body>. This avoids the 
validity issue, and, more importantly, it is safer: you make an element 
disabled only when script execution is allowed in a browser, because only in 
that case can you ever turn off the disabled property.

There are two issues with the onPaste attribute. First, in XHTML 1.0, which 
is case-sensitive, all event attribute names must be written in all 
lowercase - _not_ in "camel style". Second, no onpaste attribute is defined 
in XHTML 1.0, or in any other HTML specification, or even the HTML5 drafts. 
Here, too, scripting comes to rescue. Instead of having, say,

<input id="xyz" ... onpaste="return doFoo(...)">

(which works, on browsers that support the onpaste attribute, but does not 
validate)
you can omit the onpaste attribute and include code like

document.getElementById("xyz").onpaste = function () { return doFoo(); };

in the code that gets executed once the page has loaded.

That is, you assign an event handler to an element dynamically, instead of 
an attribute in HTML markup. This implies no limitations, because when 
scripting is disabled, the attribute will be meaningless anyway.

Similar considerations apply to onDrop (except that it belongs to HTML5 
drafts).

For onKeyPress, it should suffice to change the spelling to lowercase.

-- 
Yucca, http://www.cs.tut.fi/~jkorpela/ 

Received on Wednesday, 20 April 2011 13:50:26 UTC