2009-04-21 14 views
5

ProblemajQuery UI Dialog + ASP.NET caselle di testo + concentrano

Sto usando jQuery UI finestra per mostrare una finestra di dialogo con alcune caselle di testo e un pulsante ASP.NET in esso. Tuttavia, quando jQuery sposta il div per la finestra di dialogo all'esterno del modulo, è necessario spostarlo nuovamente nel modulo stesso (per ulteriori dettagli, vedere this), in modo che ASP.NET funzioni ancora. Questo spostamento sta causando un problema, in cui il campo non ottiene il fuoco se chiamato.

Se si guarda il campione al di sotto della linea etichettata Linea B dovrebbe impostare la messa a fuoco, tuttavia la linea con etichetta A interrompe quella. Se commento la riga A funziona. Non importa dove metto la linea B a (prima del dialogo, riga A ecc ...) non riesce ancora a mettere a fuoco.

Impostando lo stato attivo, il cursore si trova nella casella di testo che lampeggia pronto per la digitazione.

Q uestione come si imposta lo stato attivo in questo scenario?

campioni

corpo HTML di esempio

campione
<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

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

Vedere la mia soluzione per evitare il salto di messa a fuoco in jQuery UI Dialog [http://stackoverflow.com/a/9428501/1230428](http://stackoverflow.com/a/9428501/1230428) Buona fortuna – Roc

risposta

3

Funziona in FF, ma non in IE7. Ho capito 2 cose in giro. Se non si fa riferimento alla casella di testo per nome ma per posizione, o per qualche motivo se si imposta lo stato attivo due volte.

La prima:

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

La seconda:

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

si potrebbe anche classe casella di testo, come asp.net storpia ID di controllo al fine di evitare conflitti di denominazione.

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

come un esempio .. questo naturalmente sconfigge lo scopo della semantica, ma una semantica dont mescolare bene con WebForms.

4

Penso che il problema è che si sta spostando il popup e si chiama focus prima che la finestra di dialogo sia completamente creata.

Prova utilizzando evento della finestra di dialogo open invece:

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

Questo funziona per io in Ubunutu Firefox 10.0.2 e IE 6 finora. Grazie. –

7

Prova utilizzando setTimeout("$('#TextBox2').focus();",100);, per i metodi di dialogo e di altri del jQuery UI a volte ci vuole qualche secondo per eseguire effettivamente i compiti assegniamo dal codice.

Spero che questo aiuti. Questa soluzione alternativa ha aiutato in molte delle mie applicazioni.

+1

Ha funzionato, ma ho dovuto passare il timeout a 500. Thx – theschmitzer