2009-04-21 11 views
5

ProblèmejQuery UI Dialog + ASP.NET + textboxes concentrer

J'utilise dialogue jQuery UI pour afficher une boîte de dialogue avec quelques zones de texte ASP.NET et un bouton en elle. Cependant, lorsque jQuery déplace la div pour la boîte de dialogue en dehors du formulaire, je dois la redéfinir sur le formulaire moi-même (voir this pour plus de détails), afin qu'ASP.NET fonctionne toujours. Ce déplacement est à l'origine d'un problème, où le champ n'a pas de focus s'il est appelé.

Si vous regardez l'exemple ci-dessous, la ligne intitulée Ligne B doit définir le focus, mais la ligne marquée A interrompt ce point. Si je commente la ligne A, cela fonctionne. Peu importe où je déplace la ligne B vers (avant la boîte de dialogue, la ligne A etc ...), elle ne parvient toujours pas à régler le focus. En réglant la mise au point, je veux dire que le curseur est dans la zone de texte clignotant prêt à taper.

Q Q comment puis-je définir le focus dans ce scénario?

échantillons

échantillon corporel HTML

<body> 
<form id="form1" runat="server"> 
<div id="popup"> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
</div> 
</form> 
</body> 

jQuery exemple

 $(document).ready(function() { 
     var dlg = $("#popup").dialog(); 
     /*Line A*/ dlg.parent().appendTo(jQuery("form:first")); 
     /*Line B*/ $("#TextBox2").focus(); 
    }); 
+0

Voir ma solution pour éviter le saut de mise au point dans jQuery UI Dialog [http://stackoverflow.com/a/9428501/1230428](http://stackoverflow.com/a/9428501/1230428) Bonne chance – Roc

Répondre

3

Il travaille en FF, mais pas dans IE7. J'ai compris 2 travaux autour. Si vous ne faites pas référence à la zone de texte par son nom, mais par sa position ou, pour une raison quelconque, si vous définissez le focus deux fois.

La première:

$("input:text:second").focus(); 

La seconde:

$("#TextBox2").focus().focus(); 
1

vous pouvez aussi classe la zone de texte, comme asp.net mutile ids de contrôle pour éviter les conflits de noms.

$(".mytextbox").focus(); 

comme exemple .. Bien sûr défaites dans le but de la sémantique, mais la sémantique DonT bien mélanger avec webforms.

4

Je pense que le problème est que vous déplacez la fenêtre contextuelle et l'appel avant que la boîte de dialogue ne soit entièrement créée.

Essayez d'utiliser à la place de l'événement open la boîte de dialogue:

$(document).ready(function() { 
    $("#popup").dialog({ 
    open: function(){ 
     $(this).parent().appendTo(jQuery("form:first")); 
     $("#TextBox2").focus(); 
    } 
    }); 
}); 
+0

Cela fonctionne pour moi dans Ubunutu Firefox 10.0.2 & IE 6 jusqu'à présent. Merci. –

7

Essayez d'utiliser setTimeout("$('#TextBox2').focus();",100);, de dialogue et d'autres méthodes de l'interface utilisateur jQuery parfois prendre quelques secondes pour exécuter effectivement les tâches que nous assignons par code.

Espérons que cela aide. Cette solution de contournement a aidé dans beaucoup de mes applications.

+1

A travaillé, mais a dû augmenter mon délai d'attente à 500. Thx – theschmitzer