jQuery UI Dialog + текстовые поля ASP.NET + фокус - PullRequest
5 голосов
/ 21 апреля 2009

Задача

Я использую диалоговое окно jQuery UI, чтобы показать диалоговое окно с некоторыми текстовыми полями ASP.NET и кнопкой в ​​нем. Однако, так как jQuery перемещает div для диалогового окна за пределы формы, мне нужно самостоятельно переместить его обратно в форму (подробнее см. this ), так что ASP.NET все еще работает. Это перемещение вызывает проблему, когда поле не получает фокус при вызове.

Если вы посмотрите на образец под линией, помеченной линией B, следует установить фокус, однако линия, помеченная линией A, нарушит это. Если я закомментирую строку A, это сработает. Независимо от того, куда я перемещаю строку B (до диалога, строки A и т. Д.), Она все равно не может установить фокус.

Под настройкой фокуса я подразумеваю, что курсор в текстовом поле мигает, готовый к вводу.

Q uestion, как мне установить фокус в этом сценарии?

Образцы

Пример 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 образец

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

Ответы [ 4 ]

7 голосов
/ 03 мая 2009

Попробуйте использовать setTimeout("$('#TextBox2').focus();",100);, для диалога и других методов пользовательского интерфейса jQuery иногда требуется несколько секунд, чтобы фактически выполнить задачи, которые мы назначаем кодом.

Надеюсь, это поможет. Этот обходной путь помог во многих моих приложениях.

4 голосов
/ 02 мая 2009

Я думаю, проблема в том, что вы перемещаете всплывающее окно и вызываете фокус до того, как диалог полностью создан.

Попробуйте вместо этого использовать диалоговое окно open:

$(document).ready(function() {
  $("#popup").dialog({
    open: function(){
      $(this).parent().appendTo(jQuery("form:first"));
      $("#TextBox2").focus();
    }
  });
});
3 голосов
/ 21 апреля 2009

Работает в FF, но не в IE7. Я разобрался с двумя вариантами работы. Если вы ссылаетесь не на текстовое поле по имени, а по положению или по какой-либо причине, если вы установили фокус дважды.

Первый:

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

Второй:

$("#TextBox2").focus().focus();
1 голос
/ 02 мая 2009

Вы также можете классифицировать текстовое поле, так как asp.net управляет идентификаторами управления, чтобы избежать конфликтов имен.

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

в качестве примера ... это, конечно, противоречит цели семантики, но семантика плохо сочетается с веб-формами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...