EddyInTheSky
Nieuwe gebruiker
- Lid geworden
- 27 feb 2008
- Berichten
- 1
Ik heb iets zeer vreemd gevonden in mijn registratie pagina;
ik alert 2 maal dezelfde variable direct achter elkaar en hij geeft 2 verschillende resultaten weer. Deze fout werkt enkel in I.E. (ik heb versie 6). Om deze absurditeit van JScript te bezien: copy paste code in html file, open html file en druk dan direct op de 'register' knop...
code:
<html>
<head>
<title>I hate IE</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<SCRIPT LANGUAGE="JavaScript">
<!--
var errors = false;
function required(HTMLInputElement, message) {
removeError(HTMLInputElement,message);
if(!HTMLInputElement.value)
createError(HTMLInputElement,message);
}
function createError(HTMLInputElement, errorMessage){
if(!errors)
errors = true;
var errorMessage = document.createTextNode(errorMessage);
var divObj = document.createElement("DIV");
divObj.className = "formErrorLine";
divObj.appendChild(errorMessage);
try{
divObj.attributes["id"] = "errorMessage";
}catch(e){}
try{
divObj.attributes["id"].value = "errorMessage";
}catch(e){}
HTMLInputElement.parentNode.parentNode.parentNode.insertBefore(divObj, HTMLInputElement.parentNode.parentNode.nextSibling);
}
function removeError(HTMLInputElement, errorMessage){
if(HTMLInputElement.parentNode.parentNode.nextSibling.nodeType == '1' && HTMLInputElement.parentNode.parentNode.nextSibling.firstChild.data == errorMessage){
HTMLInputElement.parentNode.parentNode.nextSibling.parentNode.removeChild(HTMLInputElement.parentNode.parentNode.nextSibling);
}
}
function validateForm(){
validateHTMLInputElements();
/* normally, this would be the last line of this function:
return (!errors);
*/
//these alerts are here to show the problem:
alert("Are there any errors? -> " + errors);
alert("And now? -> " + errors);
return false;
}
function validateHTMLInputElements(){
var HTMLInputElements = document.getElementsByTagName("input");
for(i=0; i < HTMLInputElements.length; i++){
try {
var type = HTMLInputElements.attributes["type"].value;
HTMLInputElements.focus();
}catch(e){}
}
}
// -->
</SCRIPT>
<form name="register" method="post" onSubmit="return validateForm()" >
<div class='formLine'>
<div class='formLabelHeader'><label for="f_name">First name: </label></div>
<div class='formElementHeader'><input type="text" name="f_name" onblur="required(this,'please fill in your first name!'); "></div>
</div>
<div class='formLine'>
<div class='formElementHeader'><input type="submit" class="button" value="REGISTER" ></div>
</div>
</form>
</body>
</html>
Help me AUB met het vinden van een workaround of een oplossing zonder dat ik alert moet gaan gebruiken.
ik alert 2 maal dezelfde variable direct achter elkaar en hij geeft 2 verschillende resultaten weer. Deze fout werkt enkel in I.E. (ik heb versie 6). Om deze absurditeit van JScript te bezien: copy paste code in html file, open html file en druk dan direct op de 'register' knop...
code:
<html>
<head>
<title>I hate IE</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<SCRIPT LANGUAGE="JavaScript">
<!--
var errors = false;
function required(HTMLInputElement, message) {
removeError(HTMLInputElement,message);
if(!HTMLInputElement.value)
createError(HTMLInputElement,message);
}
function createError(HTMLInputElement, errorMessage){
if(!errors)
errors = true;
var errorMessage = document.createTextNode(errorMessage);
var divObj = document.createElement("DIV");
divObj.className = "formErrorLine";
divObj.appendChild(errorMessage);
try{
divObj.attributes["id"] = "errorMessage";
}catch(e){}
try{
divObj.attributes["id"].value = "errorMessage";
}catch(e){}
HTMLInputElement.parentNode.parentNode.parentNode.insertBefore(divObj, HTMLInputElement.parentNode.parentNode.nextSibling);
}
function removeError(HTMLInputElement, errorMessage){
if(HTMLInputElement.parentNode.parentNode.nextSibling.nodeType == '1' && HTMLInputElement.parentNode.parentNode.nextSibling.firstChild.data == errorMessage){
HTMLInputElement.parentNode.parentNode.nextSibling.parentNode.removeChild(HTMLInputElement.parentNode.parentNode.nextSibling);
}
}
function validateForm(){
validateHTMLInputElements();
/* normally, this would be the last line of this function:
return (!errors);
*/
//these alerts are here to show the problem:
alert("Are there any errors? -> " + errors);
alert("And now? -> " + errors);
return false;
}
function validateHTMLInputElements(){
var HTMLInputElements = document.getElementsByTagName("input");
for(i=0; i < HTMLInputElements.length; i++){
try {
var type = HTMLInputElements.attributes["type"].value;
HTMLInputElements.focus();
}catch(e){}
}
}
// -->
</SCRIPT>
<form name="register" method="post" onSubmit="return validateForm()" >
<div class='formLine'>
<div class='formLabelHeader'><label for="f_name">First name: </label></div>
<div class='formElementHeader'><input type="text" name="f_name" onblur="required(this,'please fill in your first name!'); "></div>
</div>
<div class='formLine'>
<div class='formElementHeader'><input type="submit" class="button" value="REGISTER" ></div>
</div>
</form>
</body>
</html>
Help me AUB met het vinden van een workaround of een oplossing zonder dat ik alert moet gaan gebruiken.