Προς το περιεχόμενο

focus σε textbox μέσα από ajax


dewn735

Προτεινόμενες αναρτήσεις

Δημοσ.

Για να εξηγήσω τον τίτλο:

έχω έναν σύνδεσμο που ανοίγει "παράθυρο", φορτώνοντας δεδομένα μέσα ajax. Στο παράθυρο που ανοίγει, υπάρχει μία φόρμα με ένα textbox αναζήτησης, το οποίο επιστρέφει αποτελέσματα κατά την αναζήτηση. Το θέμα είναι ότι, ενώ επιστρέφει κανονικά τα αποτελέσματα με κάθε χαρακτήρα, δεν επιστρέφει το focus στο πεδίο και πρέπει κάθε φορά να κλικάρω σε αυτό.

Στη σελίδα ο κώδικας είναι ο εξής:

>   	
<head> 
<script type="text/javascript">        	
       	function showHint(str, tab)
       	{
       	if (!tab) tab=3;
       	var xmlhttp;
       	if (window.XMLHttpRequest){xmlhttp=new XMLHttpRequest();}
       	else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
       	xmlhttp.onreadystatechange=function()
         	{
         	if (xmlhttp.readyState==4 && xmlhttp.status==200)
           	{
           	document.getElementById("windowfilter").innerHTML=xmlhttp.responseText;
           	}
         	}
       	xmlhttp.open("GET","listmacs.php"+str+"&tab="+tab,true);
       	xmlhttp.send();
       	}
   	</script>
</head>

 

και στο listmacs.php έχω:

><?php
$tab=clearstring($_GET['tab']);
$searchstr = (ISSET($_GET['searchstr'])) ? clearstring($_GET['searchstr']) : '';
if ($tab==2)
{
echo "<div class='options'><form>";
echo "Αναζήτηση μηχανήματος: <input name='searchstr' value='".$searchstr."' id='searchstr' onBlur='this.focus();' onkeyup=\"javascript:showHint('?searchstr='+this.value+'&tab=2',2);\" type='text' />";
echo "</form></div>";
echo $searchstr;
}?>

Έχω δοκιμάσει πολλά και διάφορα, όπως:

>document.getElementById('searchstr').focus();

>window.onload = function() { document.getElementById('searchstr').focus() };

όπως και αυτό που βρήκα σε σελίδα:

>setTimeout("try{document.getElementById( 'searchstr' ).focus();}catch(error){}",100);

χωρίς επιτυχία. Έχετε καμιά άλλη ιδέα;

Δημοσ.

Μου κάνει εντύπωση μιας και το έχεις γράψει σωστά..

 

Βασικά, μπορείς να γράψεις document.FORM_NAME.searchstr.focus()

 

Βλέπω ότι μέσα στην listmacs.php, κλείνεις μια φόρμα, άρα βάζεις το όνομα της φόρμας.

Το focus φαντάζομαι το κάνεις μετά το

>
document.getElementById("windowfilter").innerHTML=xmlhttp.responseText;

Δημοσ.

Δοκίμασε να βάλεις το focus μέσα σε script tags στο listmacs.php αφού κάνεις echo τη φόρμα σου (χιντ: η print είναι γρηγορότερη από την echo):

 

>
<?php
 $tab = clearstring($_GET['tab']);
 $searchstr = (ISSET($_GET['searchstr'])) ? clearstring($_GET['searchstr']) : '';
 if ($tab==2){
   echo "<div class='options'><form>";
   echo "Αναζήτηση μηχανήματος: <input name='searchstr' value='".$searchstr."' id='searchstr' onBlur='this.focus();' onkeyup=\"javascript:showHint('?searchstr='+this.value+'&tab=2',2);\" type='text' />";
   echo "</form></div>";
   echo $searchstr;
 }
 ?>
 <script type='text/javascript'>
   document.getElementById('searchstr').focus();
 </script>

Δημοσ.

Σωστός ο uberalles, ό,τι είχα δοκιμάσει το έβαζα μετά το

>xmlhttp.send();

@Thunocaster: το είχα δοκιμάσει κι αυτό, αλλά ούτε καν εκτελούσε το script

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...