Starocotes: Ajax und Fokus setzen

Sitze momentan auf dem Schlauch. Ich hole mir mit Ajax einen Teil ner Seite neu und will dann den Fokus auf ein Eingabefeld in diesem Teil setzen.

  
	xhr_chg_req_pos.onreadystatechange  = function()  
	{  
		if(xhr_chg_req_pos.readyState  == 4)  
		{  
			if(xhr_chg_req_pos.status  == 200)  
			{  
				document.getElementById("req_pos").innerHTML = xhr_chg_req_pos.responseText;  
				xhr_changeval.open('GET', "/ajax/req/fetch_val.php?comp_id=" + comp_id + "&req_id=" + req_id + "&sub_id=" + sub_id, true);  
				xhr_changeval.send();  
alert("Dummy");  
				document.req_pos.itm_new.focus();  
			}  
			else  
			{  
				document.getElementById("req_pos").innerHTML = "Error:" + xhr_chg_req_pos.responseText;  
			}  
		};  
	}  

Mit dem Alert (den ich eigentlich da nicht so wirklich brauchen kann ;)) geht das auch prima. Nehme ich den Alert raus geht es nicht mehr.

  1. Beim Schreiben von innerHTML werden die Event-Handler (und damit auch der focus) mit überschrieben. Du brauchst daher einfach einen Timeout, bis das DOM aktualisiert ist. Verwende window.setTimeout oder, wenn Du ganz präzise sein willst, prüfe in einer Timeout-Schleife, ob das DOM bereits fertig aktualisiert wurde.

    Gruß, LX

    --
    RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine ganz wunderbar. (...)
    1. Beim Schreiben von innerHTML werden die Event-Handler (und damit auch der focus) mit überschrieben. Du brauchst daher einfach einen Timeout, bis das DOM aktualisiert ist. Verwende window.setTimeout oder, wenn Du ganz präzise sein willst, prüfe in einer Timeout-Schleife, ob das DOM bereits fertig aktualisiert wurde.

      Gruß, LX

      Das erstere war auch meine Idee gewesen, da das aber nicht funktierte dachte ich wäre woanders dran liegen.

        
      // Fokus auf neue Artikelnummer setzen  
      function setnewfocus()  
      {  
      	document.req_pos.itm_new.focus();  
      }  
        
      .............  
        
      	xhr_chg_req_pos.onreadystatechange  = function()  
      	{  
      		if(xhr_chg_req_pos.readyState  == 4)  
      		{  
      			if(xhr_chg_req_pos.status  == 200)  
      			{  
      				document.getElementById("req_pos").innerHTML = xhr_chg_req_pos.responseText;  
      				xhr_changeval.open('GET', "/ajax/req/fetch_val.php?comp_id=" + comp_id + "&req_id=" + req_id + "&sub_id=" + sub_id, true);  
      				xhr_changeval.send();  
      				window.setTimeout("setnewfocus();", 10000);  
      			}  
      			else  
      			{  
      				document.getElementById("req_pos").innerHTML = "Error:" + xhr_chg_req_pos.responseText;  
      			}  
      		};  
      	}  
      
      

      Geht also so auch net, es sein denn ich packte in die setnewfocus wieder ein Alert vor dem Setzen des Fokuses ein.

      Ich denke die ganze Zeit das ich was nahezu offensichtliches übersehe, komme aber aktuell nicht drauf.

      1. Hi!

        // Fokus auf neue Artikelnummer setzen
        function setnewfocus()
        {
        document.req_pos.itm_new.focus();
        }

          
        Mit innerHTML wird auch der Zeiger auf den DOM-Node neu gesetzt, d.h. Du musst Dir das Node mit document.getElementById() neu holen - sonst funktioniert das nicht!  
          
        Gruß, LX
        
        -- 
        RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine ganz wunderbar. (...)