Сосредоточиться на текстовом поле в содержимом диалога JQuery не работает - PullRequest
2 голосов
/ 10 января 2012

У меня проблема с принудительным фокусированием на текстовом поле в содержимом диалогового окна JQuery, которое генерируется динамически. Я гуглил по этому поводу, и кажется, что если диалог Jquery установлен как модальный, JQuery «крадет» фокус на уровне документа. Если честно, я не очень понимаю, что это значит: P, но если у кого-нибудь есть обходной путь к моей проблеме, это будет оценено. Ниже приведены фрагменты кода моего диалога Jquery.

    $.post(URI, Params, function(data){
    $("<div id='MyModal'></div>").html(data).dialog({
        show: "blind",
        width:1000,
        height:600,
        title:"My Modal",
        resizable: false,
        modal: true,
        draggable:false,
        position:['center','center'],
        buttons: {
            "Close": function() { 
                //window.console.log('Close button clicked');
                $(this).dialog("close");
            }, 
        },

        // Onclose callback
        close:function(){
            // Close modal
                            CloseDiaryModal();
        }
        // End onclose callback
    })
    // Add styling to button widgets
    .dialog("widget")
    .find(".ui-dialog-buttonset").css({'float': 'left', 'width': '100%'}).end()
    .find(".ui-dialog-buttonset button")
    .eq(0).css({'float': 'left', 'margin-left': '10px'}).end()
    .eq(0).attr('id', 'CloseBtn').end()
})
.complete(function() {      
            // Set focus
    $("#SearchField").focus();
}); 
// End modal function

Я попытался добавить следующие параметры, но они все еще не работают. Банкомат, вы можете видеть, что курсор мигает около 1 секунды, а затем теряет фокус Не могу понять, почему это происходит. Спасибо и надеюсь, что кто-то может помочь мне с этим.

focus:function(event, ui) { 
        $("#SearchLastName").focus(); 
},
open:function(event, ui) { 
    $('#SearchLastName').focus(); 
},

Ответы [ 2 ]

0 голосов
/ 21 мая 2013

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

Если это так, либо удалите атрибут disabled следующим образом:

jQuery('#<form-id>').dialog({
    open: function(event, ui) {
        jQuery('#<input-id>').removeAttr('disabled').focus();
    }
});

... или не отключайте поле формы, о котором идет речь.

0 голосов
/ 10 января 2012

Я думаю больше о том, когда контент добавляется в модальное диалоговое окно.Попробуйте установить фокус на текстовом поле после того, как убедитесь, что диалоговое окно успешно загружено:

$('some selector').dialog({
    bgiframe: true,
    open: function() { 
       $('./*your element*/'.focus();
    },
    beforeclose: function(event, ui) { /* your code */ }
});

Это позволит выполнить фокус только после того, как диалоговое окно уже открыто.

...