Как размыть первый ввод формы при открытии диалога

У меня есть jQuery.dialog, которые показывают форму.
Первый вход <input type="text" class="datepicker" /> и я начинаю подобрать дату так jQuery('.datepicker').datepicker(),

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

Событие диалога open запускается до того, как фокус оказывается на

Итак, как я могу размыть первый фокус, чтобы средство выбора даты оставалось скрытым?

6 ответов

Решение

Как уже упоминалось, это известная ошибка в jQuery UI, которая должна быть исправлена ​​относительно скоро. До тех пор...

Вот еще один вариант, так что вам не нужно связываться с tabindex:

Временно отключите средство выбора даты, пока не откроется диалоговое окно:

dialog.find(".datepicker").datepicker("disable");
dialog.dialog({
    "open": function() {$(this).find(".datepicker").datepicker("enable");},
});

Работает для меня.

Начиная с jQuery UI 1.10.0, вы можете выбирать, на какой элемент ввода фокусироваться, используя автофокусировку HTML5-атрибута.

Все, что вам нужно сделать, это создать фиктивный элемент в качестве первого ввода в диалоговом окне. Это поглотит фокус для вас.

<input type="hidden" autofocus="autofocus" />

Это было проверено в Chrome, Firefox и Internet Explorer (все последние версии) 7 февраля 2013 г.

http://jqueryui.com/upgrade-guide/1.10/#added-ability-to-specify-which-element-to-focus-on-open

Согласно принятому ответу, это открытый вопрос с "ядром" пользовательского интерфейса jQuery. Как предлагается там, попробуйте установить индекс табуляции -1 в текстовое поле.

У меня была точно такая же проблема в прошлом, и я решил ее так:

 function CreateDialog(divWindow) {
        divWindow.dialog(
            {
                title: "Generate Voyages",
                autoOpen: false,
                modal: true,
                width: 'auto',
                height: 'auto',
                zIndex: -1000,
                resizable: false,
                close: function() {
                    $(this).dialog('destroy');
                    $('#ui-datepicker-div').hide();
                },               
                    "Cancel": function() {
                        $(this).dialog("close");
                        $('#ui-datepicker-div').hide();
                    }
                }
            });
    }

function DisplayWindow(divWindow) {
        divWindow.show()
        divWindow.dialog("open");                

        var datePicker = $('#ui-datepicker-div');

        var textBoxes = $('input[id^="Generate"]');

        datePicker.css('z-index', 10000);

        textBoxes.blur();
    }

$('.datepicker').blur();

это просто вызовет функцию размытия, как при использовании, поэтому указатель даты будет скрыт.

Проблема может быть в том, что вы сконцентрировали внимание на загрузке документа где-то в вашем скрипте первому элементу. либо попробуйте удалить эту опцию, либо добавьте указанную выше строку при загрузке документа:)

Мне пришлось отключить средство выбора даты перед открытием диалога и включить его при открытии. Но проблема повторяется после первоначального открытия, если вы не отключите его при закрытии, снова.

$(document).ready(function () {
    var dialog;

    $("#date").datepicker();
    $("#date").datepicker("disable");

    dialog = $("#dialog-form").dialog({
        autoOpen: false,
        height: "auto",
        width: "auto",
        modal: true,
        buttons: {
            "Create note": function () {
                $("#noteForm").submit();
            },
            Cancel: function () {
                dialog.dialog("close");
            }
        },
        open: function() {
            $("#date").datepicker("enable");
        },
        close: function () {
            $("#noteForm")[0].reset();
            $("#date").datepicker("disable");
        }
    });

    $("#create-note").button().on("click", function () {
        dialog.dialog('open');
        $("#time").focus();
    });

});
Другие вопросы по тегам