Form focus() werkt niet in Firefox en Netscape.

Zoals de titel al aangeeft, de form[i].focus() wil het maar niet doen in Firefox en Netscape. Helaas, want Safari en IE werken wel. In firefox springt hij d'r netjes naartoe en springt vervolgens weer terug, ik kan het niet vinden :x . Iemand ?

Bugje?

Probeer eens: setTimeout(“form[b:694d8f2bc5]s[/b:694d8f2bc5][i].focus()”, 50);
of anders : form[b:694d8f2bc5]s[/b:694d8f2bc5][i].select();

[b:694d8f2bc5]edit : het is document.forms[i][/b:694d8f2bc5] (dus forms ipv form…) maar ik denk dat dat een tikfoutje was… :slight_smile:

is het niet [code:1:82fd36531c]form.elements[i].focus()[/code:1:82fd36531c] ?

Probeer eens : (document.forms[i].getElementsByTagName('input'))[0].focus()

( Deze selecteert het eerste input element van form “i” )

Kan je anders het javascriptje hier niet posten?

[quote:142531a906="kaydie"]Probeer eens : (document.forms[i].getElementsByTagName('input'))[0].focus()

( Deze selecteert het eerste input element van form “i” )

Kan je anders het javascriptje hier niet posten?[/quote:142531a906]

dat kan wel maar het is een geniek scriptje. komtie

function validate(form) {
var attrVal, attrReq, attrReg, attrEq, attrFail, attrErrorMsg="", attrErrorMsg0=“Er is iets niet goed gegaan” + “nn”, attrErrorMsg1="", attrErrorMsg2="", attrErrorMsg2f="", attrErrorMsg3="", error = false, strTemp, attrFormFocus="";

for (var i = 0; i < form.length; i++) {
attrVal = form[i].getAttribute(“validate”);

switch (attrVal) {

case 'regex' :
attrReq = form[i].getAttribute("req");
attrReg = ValMethode(form[i].getAttribute("regex"));

if (!isNotEmpty(form[i]) &amp;&amp; attrReq == "y" &amp;&amp; attrErrorMsg1 == ""){
    attrErrorMsg1 ="- De velden met een * zijn noodzakelijk om afspraken te kunnen maken.nn";
    error = true;
    if(attrFormFocus == ""){
        attrFormFocus = form[i];
    }
 }

else if (attrReg != null &amp;&amp; attrReg.length != 0 &amp;&amp; isNotEmpty(form[i])){
    var regex = new RegExp(attrReg);
    strTemp = form[i].value;
    if (!strTemp.match(regex)) {
        attrErrorMsg2f = attrErrorMsg2f + form[i].getAttribute("screenname") + ", ";
        attrErrorMsg2 = "- De invoer bij " + attrErrorMsg2f + " lijkt niet juist. nn";
        error = true;
        if(attrFormFocus == ""){
            attrFormFocus = form[i];
        }
    }
}
break;

case 'equals' :
attrEq = form[i].getAttribute("equals");
var objEq = document.getElementById(attrEq);
if(objEq){
 if (form[i].value != attrEq.value) {
    attrErrorMsg3 = "- De invoer bij veld " + objEq.getAttribute("screenname") + " is niet gelijk aan de invoer bij het veld " + form[i].getAttribute("screenname") + ".n";
    error = true;
    if(attrFormFocus == ""){
        attrFormFocus = form[i];
    }
  }
}
break;

}
}
if (error == true){
attrErrorMsg = attrErrorMsg0 + attrErrorMsg1 + attrErrorMsg2 + attrErrorMsg3;
alert(attrErrorMsg);
setTimeout(attrFormFocus.focus(),0);
return false;
}
else
{
return true;
}
}

tis wellicht een beetje een groot scripje maar omdat het generiek is werkt het als een tierelier. Die focus op het eerste veld is niet de bedoeling en het probleem is dat er verschillende “fouten” in de invoer kunnen zitten, de eerste fout moet “gekozen” worden. En zoals aangegeven, hij springt er wel in maar hij springt er ook weer uit, ellendige ding. Enkel firefox en netscape dus nogmaals.

Ik zou zeggen, same player shoots again !

Is er misschien ook nog een scriptje dat de focus in het eerste veld zet bij het laden van de pagina?

[code:1:db6f489ccf]document.forms[x].elements[0].focus()[/code:1:db6f489ccf]

Bij mijn weten moet het zo. Waarom wil je focus op een heel formulier? Je wilt de gebruiker verwijzen naar het veld waar ingevoerd moet worden. Overigens, als je het formulier een naam geeft en de velden ook kun je het ook zo doen:

[code:1:db6f489ccf]document.mijnadresformulier.huisnummer.focus()[/code:1:db6f489ccf]

Je hebt dan dus ergens <FORM NAME=“mijnadresformulier”> en <INPUT NAME="huisnummer>

Jan

ja die is d'r wel maar als je die d'r niet neerzet dan werkt 't nog niet. Verschil is dan wel dat hij dan helemaal niets meer selecteerd, nu springt hij naar het eerste veld toe (logisch natuurlijk).

het lijkt wel of ik weer eens niet de juiste “dom” structuur hanteer ofzo. Maar de ellende is dat Safari rete vergevingsgezind lijkt te zijn. Daar werkt alles elke keer.

[quote:6004a9cd01="JanWeijers"][code:1:6004a9cd01]document.forms[x].elements[0].focus()[/code:1:6004a9cd01]

Waarom wil je focus op een heel formulier? Je wilt de gebruiker verwijzen naar het veld waar ingevoerd moet worden.

Je hebt dan dus ergens <FORM NAME=“mijnadresformulier”> en <INPUT NAME="huisnummer>

Jan[/quote:6004a9cd01]

ik wil juist niet de focus op het hele form, maar de “loop” loopt door de verschillende formulier elementen heen en controleerd deze op correctheid. Als er dan een fout optreed dan moet deze “belicht” worden. Ik kan dus niet “hard” coderen op adres, dan werkt het niet meer. De grap is dat ik ergens dus de verkeerde of een incomplete “node” aanroep, maar waar of welke. Eerst maar eens een bakkie.

Kan ik ergens "meekijken"? (Ik heb geen zin om een heel formulier met specifiek validatie "tags" te gaan nabouwen om het script te kunnen testen in Firefox)

Ik denk dat het een variatie is op dit script ? [url]http://www.devarticles.com/c/a/HTML/DHTML-Form-Enhancement/2/[/url]

Ik denk vermoed dat Firefox niet goed omgaat met de custom attributes van de input tag. (req, screenname, etc.). Ik heb zo helaas geen oplossing voor je…

Als je je html schrijft volgens de W3C standaarden, zou ik voor het schrijven van je javascripts deze tutorial eens doornemen…

@mac748, ik ga even een klein testje maken om te zien waar het nou in zit. Deze code staat lokaal en kan ik niet online zetten ivm php, krijgen we weer stapels foutmeldingen. Kom ik effe op terug dus.

@kaydie, is inderdaad een variatie op dat scipt. Ik ga dat script nu even testen om te zien of ik daar ook deze fout krijg.

De custom attributes zijn niet het probleem. Die herkent hij correct (kan ik zien aan de feedback bij foutieve invoer) ook de “dom inspector” in firefox ziet ze normaal. Wbt die W3C standaarden, tnx 4 the tip, zal d’r eens kijken.

EDIT: @mac748, je kan het hier even zien www.onzereis.info/test/test2.html

ik krijg hier het beschreven probleem, hij springt erin en springt er gelijk weer uit, raar.

Volgens mij zou het [code:1:37fc61e045] for (var i = 0; i < form.elements.length; i++) { attrVal = form.elements[i].getAttribute("validate");[/code:1:37fc61e045] moeten zijn

[url]www.onzereis.info/test/test3.html[/url]

zelfde verhaal. Maar vraagje, werkt het bij jou ook niet ? Safari, netscape, firefox?

ps, dank nogmaals dat je (weer) de moeite neemt voor de vragen. 8)

EDIT: hij werkt wel op windoos 98/xp FFX, NTSCP, IE en opera. dus… … … . :?

Het lijkt inderdaad op een bugje... Hij springt na een alert automatisch naar het element die de javascript getriggerd heeft.

zet in het formulier maar eens een textarea :

[code:1:a47aab63d8]<p><textarea name="errormessage" disabled></textarea></p>[/code:1:a47aab63d8]en vervang[code:1:a47aab63d8]alert(…)[/code:1:a47aab63d8]maar eens met[code:1:a47aab63d8]document.form.textarea.value = …[/code:1:a47aab63d8]
Dan doet ie het wel!

@kaydie ? bij mij loopt hij dan helemaal door zonder fouten. Wat zet jij achter [code:1:0c944efcef] document.form.textarea.value = ... [/code:1:0c944efcef] ?

als ik de inhoud van de alart erachter zet dan wordt het niets. Welke fout maak ik ?

Sorry, ik zit dingen verkeerd in te tikken hier...

Het moet zijn:
errormessage, geen textarea… Mijn fout! :oops:

Hier het aangepaste script:

[code:1:84c40cc78d]
function validate(form) {
var attrVal, attrReg, attrEq, attrFail, strTemp;

for (var i = 0; i < form.elements.length; i++) {
attrVal = form.elements[i].getAttribute("validate");

switch (attrVal) {
case ‘required’ :
if (!isNotEmpty(form[i])) {
attrFail = form[i].getAttribute(“failure”);

 if &#40;attrFail&#41;
  document.form.errormessage.value = attrFail;
 else    
  alert&#40;'You must complete all required form fields.'&#41;; 
 form&#91;i&#93;.focus&#40;&#41;;
 return false;
&#125;
break;

case 'regex' &#58;
attrReg = form&#91;i&#93;.getAttribute&#40;&quot;regex&quot;&#41;;
if &#40;attrReg != null &amp;&amp; attrReg.length != 0&#41; &#123;
 var regex = new RegExp&#40;attrReg&#41;;
 strTemp = form&#91;i&#93;.value;
 if &#40;!strTemp.match&#40;regex&#41;&#41; &#123;
  attrFail = form&#91;i&#93;.getAttribute&#40;&quot;failure&quot;&#41;;

  if &#40;attrFail&#41;
   document.form.errormessage.value = attrFail;
  else
   document.form.errormessage.value = 'Invalid data format at field &quot;' + form&#91;i&#93;.name + '&quot;.';
  form&#91;i&#93;.focus&#40;&#41;;
  return false;
 &#125;
&#125;
break;

}

}

return true;
}
[/code:1:84c40cc78d]

hier ook de doppertjes weer achter de kiezen en inderdaad. Dat lijkt er meer op. Hij is in vol ornaat te bezichtigen op [url]www.onzereis.info/test/test4.html[/url]

Aan allen, bedankt voor jullie hulp !

En nu? Bugje melden of hoe doet men dit ?