2009-04-21 17 views
5

problememotaczaniem jQuery UI Dialog + ASP.NET + skupić

Używam dialogowego jQuery UI, aby wyświetlić okno dialogowe z niektórych otaczaniem ASP.NET i przycisk w nim. Jednak ponieważ jQuery przenosi element div dla okna dialogowego poza formularz, muszę ponownie przenieść go z powrotem do formularza (zob. this), aby program ASP.NET nadal działał. To poruszanie powoduje problem, gdy pole nie jest aktywne, jeśli zostanie wywołane.

Jeśli przyjrzeć się przykładowi poniżej linii oznaczonej jako Linia B, należy ustawić fokus, jednak linia oznaczona linią A to zepsuje. Jeśli skomentuję wiersz A, to działa. Niezależnie od tego, gdzie przeniesiemy linię B do (przed dialogiem, linią A itd.), Nadal nie można ustawić ostrości.

Przez ustawienie ostrości mam na myśli kursor w polu tekstowym migającym gotowym do wpisania.

Q ujęcie jak ustawić fokus w tym scenariuszu?

Próbki

próbka ciała 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 próbka

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

Zobacz moje rozwiązanie, aby zapobiec przeskakiwaniu ostrości w oknie dialogowym jQuery UI [http://stackoverflow.com/a/9428501/1230428](http://stackoverflow.com/a/9428501/1230428) Powodzenia – Roc

Odpowiedz

3

To działa w FF, ale nie w IE7. Wymyśliłem 2 prace dookoła. Jeśli nie odwołujesz się do pola tekstowego według nazwy, pozycji lub z jakiegoś powodu, jeśli ustawisz fokus dwukrotnie.

Pierwszy:

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

Drugi:

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

mogłeś również klasa pole tekstowe, jak asp.net Zmieniany identyfikatory kontrolne w celu uniknięcia konfliktów nazw.

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

jako przykład .. to oczywiście celowość semantyki ale semantyka nie dobrze wymieszać z webforms.

4

Myślę, że problem polega na tym, że przesuwasz wyskakujące okienko i wywołujesz fokus, zanim okno dialogowe zostanie w pełni utworzone.

Spróbuj użyć okna dialogowego za open imprezę zamiast:

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

To działa dla ja w Ubunutu Firefox 10.0.2 i IE 6 do tej pory. Dzięki. –

7

Spróbuj użyć setTimeout("$('#TextBox2').focus();",100); dla dialogowych i innych metod jQuery UI czasami potrwać kilka sekund, aby właściwie wykonywać zadania przydzielamy kodem.

Mam nadzieję, że to pomoże. To obejście pomogło w wielu moich aplikacjach.

+1

Pracowałem, ale musiałem zwiększyć mój limit czasu do 500. Thx – theschmitzer