Cegah dialog jQuery UI dari pengaturan fokus ke kotak teks pertama

156

Saya telah menyiapkan dialog modal UI jQuery untuk ditampilkan ketika pengguna mengklik tautan. Ada dua kotak teks (saya hanya menunjukkan kode untuk 1 untuk singkatnya) dalam tag div dialog itu dan diubah menjadi kotak teks DatePicker jQuery UI yang bereaksi pada fokus.

Masalahnya adalah dialog UI jQuery ('terbuka') entah bagaimana memicu kotak teks pertama untuk memiliki fokus, yang kemudian memicu kalender datepicker untuk segera dibuka.

Jadi saya mencari cara untuk mencegah fokus terjadi secara otomatis.

<div><a id="lnkAddReservation" href="#">Add reservation</a></div>

<div id="divNewReservation" style="display:none" title="Add reservation">
    <table>
        <tr>
            <th><asp:Label AssociatedControlID="txtStartDate" runat="server" Text="Start date" /></th>
            <td>
                <asp:TextBox ID="txtStartDate" runat="server" CssClass="datepicker" />
            </td>
        </tr>
    </table>

    <div>
        <asp:Button ID="btnAddReservation" runat="server" OnClick="btnAddReservation_Click" Text="Add reservation" />
    </div>
</div>

<script type="text/javascript">
    $(document).ready(function() {
        var dlg = $('#divNewReservation');
        $('.datepicker').datepicker({ duration: '' });
        dlg.dialog({ autoOpen:false, modal: true, width:400 });
        $('#lnkAddReservation').click(function() { dlg.dialog('open'); return false; });
        dlg.parent().appendTo(jQuery("form:first"));
    });
</script>
Slolife
sumber
itu akan mengatur fokus bahkan ke gambar! baik untuk tag <img> biasa - serta <input type = image>
Simon_Weaver

Jawaban:

78

jQuery UI 1.10.0 Changelog mendaftar tiket 4731 sebagai diperbaiki.

Sepertinya fokusSelektor tidak diimplementasikan, tetapi pencarian cascading untuk berbagai elemen digunakan sebagai gantinya. Dari tiket:

Perluas autofokus, mulai dengan [fokus otomatis], lalu: konten tabbable, lalu buttonpane, lalu tutup tombol, lalu dialog

Jadi, tandai elemen dengan autofocusatribut dan itu adalah elemen yang harus mendapatkan fokus:

<input autofocus>

Dalam dokumentasi , logika fokus dijelaskan (tepat di bawah daftar isi, dengan judul 'Fokus'):

Setelah membuka dialog, fokus secara otomatis dipindahkan ke item pertama yang cocok dengan yang berikut:

  1. Elemen pertama dalam dialog dengan autofocusatribut
  2. :tabbableElemen pertama dalam konten dialog
  3. :tabbableElemen pertama di dalam tombol button dialog
  4. Tombol tutup dialog
  5. Dialog itu sendiri
Slolife
sumber
Untuk apa downvote? Jika itu karena saya mendaftarkan 1.9 sebagai versi perbaikan, saya telah memperbarui ke 1.10 agar sesuai dengan tiket.
Slolife
1
Saya sedang melihat dokumentasi jquery-ui 1.10 untuk Dialog, dan saya tidak melihatnya. Saya mencari "focusSelector" di api, dan tidak ada di sana.
Paul Tomblin
3
Menyetel fokus ke elemen apa pun yang berada di luar layar akan menggulirkan jendela ke atas atau ke bawah ke elemen itu, dan ini terjadi setiap kali jendela mendapatkan fokus, tidak hanya pada dialog terbuka. Jika saya menggunakan Firebug untuk "memeriksa elemen" dan kemudian mengklik kembali di jendela dokumen, jendela saya akan menggulir ke atas atau ke bawah ke elemen mana pun yang difokuskan jQuery-UI. Pertanyaannya bukan bagaimana memilih elemen mana yang menjadi fokus, tetapi bagaimana mencegah fokus. Memilih elemen yang berbeda untuk fokus tidak akan menyelesaikan masalah.
Vladimir Kornea
4
Gagasan bahwa jQuery UI menganggap ini 'tetap' gila. Cara mengatasinya adalah untuk menghapus setiap logika autofocusing sama sekali. Saya meminta Anda untuk membuka dialog, bukan fokus pada input. Sangat mengganggu.
AJB
2
fwiw, saya menambahkan input w / type = "hidden" di atas input pertama dan menambahkan atribut autofocus padanya. Itu tidak berarti apa yang Anda pikirkan artinya, tetapi itu berfungsi untuk memperbaiki masalah ini.
jinglesthula
77

Tambahkan rentang tersembunyi di atasnya, gunakan ui-helper-hidden-dapat diakses untuk membuatnya tersembunyi oleh penentuan posisi absolut. Saya tahu Anda memiliki kelas itu karena Anda menggunakan dialog dari jquery-ui dan itu di jquery-ui.

<span class="ui-helper-hidden-accessible"><input type="text"/></span>
Patrick Lee Scott
sumber
1
Kerja bagus di sekitar. Tidak diperlukan js, tidak mengubah tata letak, dan jquery ui mendukungnya secara asli.
steampowered
Setuju, kerja bagus di sekitar. Juga senang mengetahui tentang kelas yang dapat diakses secara tersembunyi! Terima kasih!!
user1055761
4
Ini menyebabkan masalah bagi orang yang menggunakan teknologi bantu (mis. Pembaca layar)
rink.attendant.6
1
@ rink.attendant.6 masalah apa?
oxfn
solusi luar biasa
Pedro Coelho
63

Di jQuery UI> = 1.10.2, Anda dapat mengganti _focusTabbablemetode prototipe dengan fungsi plasebo:

$.ui.dialog.prototype._focusTabbable = $.noop;

Biola

Ini akan mempengaruhi semua dialogyang ada di halaman tanpa harus mengedit masing-masing secara manual.

Fungsi asli tidak melakukan apa pun selain mengatur fokus ke elemen pertama dengan autofocusatribut / tabbableelemen / atau kembali ke dialog itu sendiri. Karena penggunaannya hanya mengatur fokus pada suatu elemen, seharusnya tidak ada masalah menggantinya dengan a noop.

Fabrício Matté
sumber
7
Jam dan jam dan jam dan jam terbakar pada ini. Klien saya, terima kasih.
Lamarant
1
Ini seharusnya jawabannya!
briansol
2 hari mencari solusi ini ... tidak ada yang berhasil ... Terima kasih banyak!
Legionar
1
Peringatan: ketika dialog muncul, menekan tombol Escape tidak akan menutup dialog (sampai Anda fokus dialog).
Robert
1
@Robert, alih-alih menggantinya $.noop, ganti dengan fungsi yang mencatat dialog aktif, lalu daftarkan event handler kunci global yang memotong ESCdan menutup dialog 'aktif' jika ada.
Perkins
28

Mulai dari jQuery UI 1.10.0, Anda dapat memilih elemen input mana yang menjadi fokus dengan menggunakan autofocus atribut HTML5 .

Yang harus Anda lakukan adalah membuat elemen dummy sebagai input pertama Anda di kotak dialog. Ini akan menyerap fokus untuk Anda.

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

Ini telah diuji di Chrome, Firefox dan Internet Explorer (semua versi terbaru) pada 7 Februari 2013.

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

ulat sutra
sumber
27

Saya menemukan kode berikut fungsi dialog jQuery UI untuk terbuka.

c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();

Anda bisa mengatasi perilaku jQuery atau mengubah perilaku.

tabindex -1 berfungsi sebagai solusi.


sumber
1
Tidak akan tabindex = -1 mencegah saya dari tab ke kotak teks?
slolife
2
Terima kasih atas penelitiannya. Sekarang saya tahu bahwa itu adalah kode aktual yang melakukannya. Saya mungkin memberikan saran kepada tim UI jQuery untuk menambahkan opsi untuk menonaktifkan fokus otomatis ini.
Slolife
3
@slolife - Maaf untuk menghidupkan kembali utas yang benar-benar tua ini, tetapi tiket itu mengatakan perbaikan ( focusSelectoropsi) seharusnya berada di jQueryUI 1.8, dan kami sekarang di 1.8.13 dan saya tidak melihatnya di dokumen dialog jQueryUI docs . Apa yang terjadi dengan ini?
Tom Hamming
Lupakan. Saya telah melihat "Tonggak berubah dari TBD menjadi 1,8" dalam sejarah modifikasi, dan tidak memperhatikan bahwa itu benar-benar mengatakan 1,9 di atas.
Tom Hamming
Saya memiliki masalah yang serupa, solusi saya dijelaskan di sini - stackoverflow.com/a/12250193/80002
tandai
15

Baru tahu ini sambil bermain-main.

Saya menemukan dengan solusi ini untuk menghapus fokus, menyebabkan ESCkunci berhenti bekerja (yaitu menutup dialog) ketika pertama kali masuk ke Dialog.

Jika dialog terbuka dan Anda segera menekan ESC, itu tidak akan menutup dialog (jika Anda telah mengaktifkannya), karena fokusnya adalah pada beberapa bidang tersembunyi atau sesuatu, dan itu tidak mendapatkan peristiwa penekanan tombol.

Cara saya memperbaikinya adalah menambahkan ini ke acara terbuka untuk menghapus fokus dari bidang pertama sebagai gantinya:

$('#myDialog').dialog({
    open: function(event,ui) {
        $(this).parent().focus();
    }
});

Ini menetapkan fokus ke kotak dialog, yang tidak terlihat, dan kemudian ESCkuncinya bekerja.

Rob Donovan
sumber
3
Tampaknya ini satu-satunya solusi yang berfungsi, yang tidak termasuk menambahkan HTML yang tidak berguna, menghapus tabindex atau menghancurkan kunci ESC.
Bojan Bedrač
10

Atur tabindex dari input menjadi -1, dan kemudian atur dialog.open untuk mengembalikan tabindex jika Anda membutuhkannya nanti:

$(function() {
    $( "#dialog-message" ).dialog({
        modal: true,
        width: 500,
        autoOpen: false,
        resizable: false,
        open: function()
        {
            $( "#datepicker1" ).attr("tabindex","1");
            $( "#datepicker2" ).attr("tabindex","2");
        }
    });
});
kotak merah
sumber
4
Tidak akan tabindex = -1 mencegah saya dari tab ke kotak teks?
slolife
1
u bisa menggunakan setTimeout untuk mengatur tabindex kembali setelah dialog ditampilkan
redsquare
10

Solusi saya:

open: function(){
  jQuery('input:first').blur();
  jQuery('#ui-datepicker-div').hide();
},  
Thomas
sumber
+1. Bekerja seperti jimat menggunakan :firstpemilih atau .first()di FF / Chrome / IE9. Melemparnya ke dalam dialogopenkarya yang mengikat juga.
nickb
Yang ini juga membuat saya di sana. Kecuali dengan saya, dialog saya tidak memiliki input sama sekali, dan tautan pertama mendapatkan fokus ... jadi saya menambahkan opsi ini ke dialog jQuery saya:open: function(){ $('a').blur(); // no autofocus on links }
Marcus
8

Saya punya konten yang lebih panjang dari dialog. Saat terbuka, dialog akan berubah menjadi yang pertama: tabbable yang berada di bagian bawah. Inilah perbaikan saya.

$("#myDialog").dialog({
   ...
   open: function(event, ui) { $(this).scrollTop(0); }
});
tukang itu
sumber
Ini bekerja untuk saya, tetapi saya menggunakan $('...').blur();daripada menggulir.
Jawa
4
Konten saya juga sangat panjang. blur menghapus seleksi, tetapi membiarkan dialog bergulir ke bawah. scrollTop menggulir konten ke atas tetapi meninggalkan pilihan. Saya akhirnya menggunakan $ ('...'). Blur (); $ (ini) .scrollTop (0); bekerja seperti jagoan.
7

Solusi sederhana:

Cukup buat elemen tak terlihat dengan tabindex = 1 ... Ini tidak akan memfokuskan datepicker ...

misalnya.:

<a href="" tabindex="1"></a>
...
Here comes the input element
Andy
sumber
Berfungsi baik di IE9 dan firefox, tetapi tidak safari / chrome.
tuseau
3

Inilah solusi yang saya terapkan setelah membaca tiket jQuery UI # 4731 , awalnya diposting oleh slolife sebagai jawaban atas jawaban lain (Tiket itu juga dibuat olehnya.)

Pertama, dalam metode apa pun yang Anda gunakan untuk menerapkan pelengkapan otomatis ke halaman, tambahkan baris kode berikut:

$.ui.dialog.prototype._focusTabbable = function(){};

Itu menonaktifkan perilaku "fokus otomatis" jQuery. Untuk memastikan bahwa situs Anda terus dapat diakses secara luas, bungkus metode pembuatan dialog Anda sehingga kode tambahan dapat ditambahkan, dan tambahkan panggilan untuk memfokuskan elemen input pertama:

function openDialog(context) {

    // Open your dialog here

    // Usability for screen readers.  Focus on an element so that screen readers report it.
    $("input:first", $(context)).focus();

}

Untuk lebih lanjut mengatasi aksesibilitas ketika opsi pelengkapan otomatis dipilih melalui keyboard, kami menimpa panggilan balik "pilih" otomatis jQuery UI dan menambahkan beberapa kode tambahan untuk memastikan textElement tidak kehilangan fokus di IE 8 setelah membuat pilihan.

Berikut adalah kode yang kami gunakan untuk menerapkan pelengkapan otomatis ke elemen:

$.fn.applyAutocomplete = function () {

    // Prevents jQuery dialog from auto-focusing on the first tabbable element.
    // Make sure to wrap your dialog opens and focus on the first input element
    // for screen readers.
    $.ui.dialog.prototype._focusTabbable = function () { };

    $(".autocomplete", this)
        .each(function (index) {

            var textElement = this;

            var onSelect = $(this).autocomplete("option", "select");
            $(this).autocomplete("option", {
                select: function (event, ui) {
                    // Call the original functionality first
                    onSelect(event, ui);

                    // We replace a lot of content via AJAX in our project.
                    // This ensures proper copying of values if the original element which jQuery UI pointed to
                    // is replaced.
                    var $hiddenValueElement = $("#" + $(textElement).attr('data-jqui-acomp-hiddenvalue'));
                    if ($hiddenValueElement.attr("value") != ui.item.value) {
                        $hiddenValueElement.attr("value", ui.item.value);
                    }

                    // Replace text element value with that indicated by "display" if any
                    if (ui.item.display)
                        textElement.value = ui.item.display;

                    // For usability purposes.  When using the keyboard to select from an autocomplete, this returns focus to the textElement.
                    $(textElement).focus();

                    if (ui.item.display)
                        return false;

                }
            });
        })
        // Set/clear data flag that can be checked, if necessary, to determine whether list is currently dropped down
        .on("autocompleteopen", function (event, ui) {
            $(event.target).data().autocompleteIsDroppedDown = true;
        })
        .on("autocompleteclose", function (event, ui) {
            $(event.target).data().autocompleteIsDroppedDown = false;
        });

    return this;
}

sumber
2

Anda dapat menyediakan opsi ini, untuk memfokuskan tombol tutup saja.

.dialog({
      open: function () {
              $(".ui-dialog-titlebar-close").focus();
            }
   });
Jay Dubal
sumber
1

Ini bisa menjadi perilaku browser bukan masalah plugin jQuery. Sudahkah Anda mencoba menghapus fokus secara terprogram setelah Anda membuka sembulan.

$('#lnkAddReservation').click(function () {
    dlg.dialog('open');

    // you may want to change the selector below
    $('input,textarea,select').blur();

    return false;
});

Belum diuji tetapi harus bekerja ok.

RaYell
sumber
1
sayangnya ini tidak berhasil. tidak yakin apakah itu hal IE, atau hal UI jquery. tetapi bahkan jika Anda memindahkan fokus ke hal lain secara terprogram, kalender tetap terbuka.
Patricia
1

Saya memiliki masalah yang sama dan menyelesaikannya dengan memasukkan input kosong sebelum datepicker, yang mencuri fokus setiap kali dialog dibuka. Input ini disembunyikan pada setiap pembukaan dialog dan ditampilkan lagi pada penutupan.

Manuel Leuenberger
sumber
1

Yah, itu keren bahwa tidak ada yang menemukan solusi untuk saat ini, tetapi sepertinya saya punya sesuatu untuk Anda. Kabar buruknya adalah dialog ini tetap fokus dalam hal apa pun meskipun tidak ada input dan tautan di dalamnya. Saya menggunakan dialog sebagai tooltip dan pasti perlu fokus tetap pada elemen asli. Ini solusinya:

gunakan opsi [buka otomatis: salah]

$toolTip.dialog("widget").css("visibility", "hidden"); 
$toolTip.dialog("open");
$toolTip.dialog("widget").css("visibility", "visible");

Sementara dialog tidak terlihat, fokus tidak diatur di mana pun dan tetap di tempat asli. Ini berfungsi untuk tooltips hanya dengan teks biasa, tetapi tidak diuji untuk dialog yang lebih fungsional di mana mungkin penting untuk memiliki dialog yang terlihat pada saat pembukaan. Mungkin akan bekerja dengan baik dalam hal apa pun.

Saya mengerti bahwa posting asli hanya untuk menghindari fokus pada elemen pertama, tetapi Anda dapat dengan mudah memutuskan di mana fokus seharusnya setelah dialog dibuka (setelah kode saya).

Diuji dalam IE, FF dan Chrome.

Semoga ini bisa membantu seseorang.

Roc
sumber
1

Saya punya masalah serupa. Saya membuka dialog kesalahan ketika validasi gagal dan itu mengambil fokus, seperti yang ditunjukkan Flugan dalam jawabannya . Masalahnya adalah bahwa bahkan jika tidak ada elemen di dalam dialog itu tabbable, dialog itu sendiri masih fokus. Berikut adalah kode asli yang tidak diubah dari jquery-ui-1.8.23 \ js \ jquery.ui.dialog.js:

// set focus to the first tabbable element in the content area or the first button
// if there are no tabbable elements, set focus on the dialog itself
$(self.element.find(':tabbable').get().concat(
  uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
    uiDialog.get()))).eq(0).focus();

Komentar adalah milik mereka!

Ini sangat buruk bagi saya karena beberapa alasan. Yang paling menyebalkan adalah reaksi pertama pengguna adalah menekan backspace untuk menghapus karakter terakhir, tetapi sebaliknya ia diminta untuk meninggalkan halaman, karena backspace dipukul di luar kontrol input.

Saya menemukan bahwa solusi berikut ini bekerja cukup baik untuk saya:

jqueryFocus = $.fn.focus;
$.fn.focus = function (delay, fn) {
  jqueryFocus.apply(this.filter(':not(.ui-dialog)'), arguments);
};
menandai
sumber
Ini dapat diperluas untuk hanya memengaruhi dialog tertentu dengan menggunakan opsi 'dialogClass' di .dialog () dan kemudian mengubah yang di atas: bukan filter untuk menyertakan kelas Anda. mis: not (.ui-dialog.myDialogClass)
Andrew Martinez
1

Saya mencari-cari masalah yang berbeda tetapi penyebab yang sama. Masalahnya adalah bahwa dialog mengatur fokus ke yang pertama kali <a href="">.</a>ditemukan. Jadi, jika Anda memiliki banyak teks dalam dialog Anda dan bilah gulir muncul Anda bisa memiliki situasi di mana bilah gulir akan digulir ke bawah. Saya percaya ini juga memperbaiki pertanyaan orang pertama. Meskipun yang lain juga melakukannya.

Sederhana mudah dimengerti. <a id="someid" href="#">.</a> sebagai baris pertama di div dialog Anda.

CONTOH:

 <div id="dialogdiv" title="some title">
    <a id="someid" href="#">.</a>
    <p>
        //the rest of your stuff
    </p>
</div>

Di mana dialog Anda dimulai

$(somediv).dialog({
        modal: true,
        open: function () { $("#someid").hide(); otherstuff or function },
        close: function () { $("#someid").show(); otherstuff or function }
    });

Di atas tidak akan fokus dan bilah gulir akan tetap di bagian atas tempatnya. The <a>mendapat fokus tapi kemudian disembunyikan. Jadi efek keseluruhan adalah efek yang diinginkan.

Saya tahu ini adalah utas lama tetapi untuk sebagai UI UI tidak ada perbaikan untuk ini. Ini tidak membutuhkan blur atau fokus untuk bekerja. Tidak yakin apakah itu yang paling elegan. Tapi itu masuk akal dan mudah dijelaskan kepada siapa pun.

MikeF
sumber
1

Jika Anda hanya memiliki satu bidang dalam bentuk dialog Jquery dan itu adalah bidang yang membutuhkan Datepicker, atau Anda dapat mengatur fokus pada tombol Tutup (silang) di bilah judul dialog:

$('.ui-dialog-titlebar-close').focus();

Sebut dialog SETELAH ini diinisialisasi, misalnya:

$('#yourDialogId').dialog();
$('.ui-dialog-titlebar-close').focus();

Karena tombol tutup diberikan setelah .dialog()dipanggil.

mikhail-t
sumber
1

Jika Anda menggunakan tombol dialog, cukup atur autofocusatribut di salah satu tombol:

$('#dialog').dialog({
  buttons: [
    {
      text: 'OK',
      autofocus: 'autofocus'
    },
    {
      text: 'Cancel'
    }
  ]
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet"/>

<div id="dialog" title="Basic dialog">
  This is some text.
  <br/>
  <a href="www.google.com">This is a link.</a>
  <br/>
  <input value="This is a textbox.">
</div>

Sam
sumber
0

Saya mendapat masalah yang sama.

Solusi yang saya lakukan adalah menambahkan kotak teks dummy di bagian atas wadah dialog.

<input type="text" style="width: 1px; height: 1px; border: 0px;" />
TTCG
sumber
0

Seperti disebutkan, ini adalah bug yang dikenal dengan jQuery UI dan harus segera diperbaiki. Sampai saat itu ...

Ini opsi lain, jadi Anda tidak perlu mengacaukan tabindex:

Nonaktifkan datepicker sementara hingga kotak dialog terbuka:

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

Bekerja untukku.

Duplikat pertanyaan: Bagaimana mengaburkan input formulir pertama pada pembukaan dialog

BMiner
sumber
0

Untuk memperluas beberapa jawaban sebelumnya (dan mengabaikan aspek pendukung data tambahan), jika Anda ingin mencegah focus()acara memfokuskan bidang input pertama saat dialog Anda terbuka, coba ini:

$('#myDialog').dialog(
    { 'open': function() { $('input:first-child', $(this)).blur(); }
});
nickb
sumber
0

Saya memiliki masalah yang sama dan menyelesaikannya dengan berfokus pada dialog setelah dibuka:

var $dialog = $("#pnlFiltros")
    .dialog({
        autoOpen: false,
        hide: "puff",                   
        width: dWidth,
        height: 'auto',
        draggable: true,
        resizable: true,
        closeOnScape : true,
        position: [x,y]                    
    });
$dialog.dialog('open');
$("#pnlFiltros").focus(); //focus on the div being dialogued (is that a word?)

Tetapi dalam kasus saya elemen pertama adalah jangkar, jadi saya tidak tahu apakah dalam kasus Anda itu akan membiarkan datepicker terbuka.

EDIT: hanya berfungsi di IE

daniloquio
sumber
0

temukan di jquery.ui.js

d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(); 

dan ganti dengan

d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(-1).focus();
pengguna1443069
sumber
0

jQuery 1.9 dirilis dan tampaknya tidak ada perbaikan. Mencoba mencegah fokus kotak teks pertama oleh beberapa metode yang disarankan tidak berfungsi di 1.9. Saya pikir karena metode yang mencoba mengaburkan fokus atau memindahkan fokus terjadi SETELAH kotak teks dalam dialog sudah mendapatkan fokus dan melakukan pekerjaan kotornya.

Saya tidak dapat melihat apa pun di dokumentasi API yang membuat saya berpikir bahwa ada sesuatu yang berubah dalam hal fungsi yang diharapkan. Mati untuk menambahkan tombol pembuka ...

pixelda
sumber
Cara mengatasinya sekarang telah didorong ke 1.10 sesuai dengan tiket jQuery: bugs.jqueryui.com/ticket/4731
slolife
0

Saya punya masalah serupa. Di halaman saya, input pertama adalah kotak teks dengan kalender jQuery UI. Elemen kedua adalah tombol. Karena tanggal sudah memiliki nilai, saya menetapkan tombol fokus, tetapi pertama-tama tambahkan pemicu untuk blur pada kotak teks. Ini mengatasi masalah di semua browser dan mungkin di semua versi jQuery. Diuji dalam versi 1.8.2.

<div style="padding-bottom: 30px; height: 40px; width: 100%;">
@using (Html.BeginForm("Statistics", "Admin", FormMethod.Post, new { id = "FormStatistics" }))
{
    <label style="float: left;">@Translation.StatisticsChooseDate</label>
    @Html.TextBoxFor(m => m.SelectDate, new { @class = "js-date-time",  @tabindex=1 })
    <input class="button gray-button button-large button-left-margin text-bold" style="position:relative; top:-5px;" type="submit" id="ButtonStatisticsSearchTrips" value="@Translation.StatisticsSearchTrips"  tabindex="2"/>
}

<script type="text/javascript">
$(document).ready(function () {        
    $("#SelectDate").blur(function () {
        $("#SelectDate").datepicker("hide");
    });
    $("#ButtonStatisticsSearchTrips").focus();

});   

pengguna1698635
sumber
0

Ini sangat penting untuk smartphone dan tablet karena keyboard muncul ketika input memiliki fokus. Inilah yang telah saya lakukan, tambahkan input ini di awal div:

<input type="image" width="1px" height="1px"/>

Tidak berfungsi dengan ukuran 0px. Saya kira itu lebih baik dengan gambar transparan nyata, baik .pngatau.gif saya belum mencoba.

Sejauh ini berfungsi dengan baik di iPad.

Ángel Arbeteta
sumber
-1

Anda dapat menambahkan ini:

...

dlg.dialog({ autoOpen:false,
modal: true, 
width: 400,
open: function(){                  // There is new line
  $("#txtStartDate").focus();
  }
});

...

Khofidin Ofid
sumber
3
Dia bertanya bagaimana mencegah fokus, bukan menambah fokus.
CBarr
-2

sebagai input pertama: <input type="text" style="position:absolute;top:-200px" />

pengguna2816796
sumber