2013-10-01 28 views
6

tıklatıldığında jQuery UI iletişim kutusundaki bir form alanına odağı ayarlanamıyor, tek alan formu içeren bir jQuery UI iletişim kutusu var ve autoOpen özelliği başlangıçta false değerine ayarlı. Sayfada başka bir jQuery UI menüsü var ve diyaloğun açık işlevi menü öğelerinin tıklama etkinliğine bağlanıyor. Diyalog açık bir şekilde menü öğelerinin tıklanmasıyla açıldığında diyalogun tek form alanına odaklanmaya çalışıyorum. Nedeni saptamak için başka bir test butonu ekledim ve bu tuşa tıklayarak odağı form alanına ayarlayabilirim. Bu yüzden alanın odağını önleyen jQuery UI menüsü olduğundan eminim. Bu kısıtlamayı aşabileceğim herhangi bir yol var mı diye merak ediyorum. Herhangi bir fikir takdir edilir. Teşekkürler!Bir jQueryUI menü öğesi

html:

<ul id="menu"> 
    <li><a href="#">Item 1</a></li> 
    <li><a href="#">Item 2</a></li> 
</ul> 
</br> 
<button id="btn">Open the dialog</button> 

<div id="dialog" title="Basic dialog"> 
    <form> 
     <input type="text" id="fld" /> 
    </form> 
</div> 

javascript:

İşte
$("#dialog").dialog({ 
    autoOpen: false, 
    open: function(event, ui){ 
     $('#fld').focus(); 
    } 
}); 

$('#btn').click(function(e){ 
    $("#dialog").dialog('open'); 
}); 

$('#menu li a').click(function(){ 
    $("#dialog").dialog('open'); 
}) 

$("#menu").menu({ 
    select: function(event, ui) { 
     $("#dialog").dialog('open'); 
    } 
}); 

İlginç js fiddle

cevap

9

olduğunu. JQuery menüsü bir şekilde odağı etkilemektedir. Kemanına bakıyordum ve 1 milisaniye çalışmayı geciktirmen bile fark ettim.

Buna bir bakın. Diyalog Sayfa

$(window).load(function() { 
    //Use Focus as $("#stsr").focus(); 
} 
+0

Merhaba @Trevor, ben biraz senin keman test etti ve bu sayfa yüklendiğinde her zaman, odaklamayı ayarlamak değil menü öğeleri ilk tıklama ve tüm tıklamalar sonradan kusursuzca çalışır görünüyor. İstediğime kesinlikle daha yakın. Yardımınıza minnettar olurum. – aarryy

+0

Merhaba @Trevor, çözümünüzü gerçek bir çözümle test ettim ve şaşırtıcı bir şekilde işe yaradı. Bunun arkasındaki mantığı göremiyorum. Muhtemelen gerçek çözümün, jquery ve jquery UI'nin tam olarak aynı versiyonunu kullanmamasıdır. Her neyse yardım için teşekkürler. – aarryy

+0

Hoşgeldin, bu benim kemanın garibi, ilk defa benim için çalışıyor. Git rakamı. – Trevor

1

kullanın Bu seferki beni delirtti. İşte benim için ne düzeltildi (@ Trevor'un cevabının daha genel versiyonu).

$('#element').dialog({ 
    open: function() {       
    //focus fix 
    $('textarea, input', $(this)).click(function() { 
     var $inp = $(this); 
     setTimeout(function() { 
      $inp.focus(); 
     }, 1); 
    });       
    } 
}); 
+0

Bu da iyi bir çözüm. Bazı açıklamalar: diyaloğun açık olayı, html'nin yüklenmesi için "beklemez", iletişim kutusu açılır açılmaz çalıştırılır ve buradaki asıl sorun budur. $ (Window) üzerinde fonksiyon ekleme.load veya $ (document). dialog'un html'sine göre, fonksiyon çağrılmadan önce kod tamamen yüklenene kadar bekler, böylece henüz mevcut olmayan giriş odaklama problemini çözer. Bunun daha iyi bir çözüm olabileceğini ve zaman aşımını ayarlayabileceğini düşünüyorum. – vove

1

üzerinde

$("#dialog").dialog({ 
    autoOpen: false, 
    open: function(event, ui){ 
     setTimeout(function(){$('#fld').focus();},1); 
    } 
}); 

$('#btn').click(function(e){ 
    $("#dialog").dialog('open'); 
}); 

$('#menu li a').click(function(){ 
    $("#dialog").dialog('open'); 
}) 

$("#menu").menu(); 

http://jsfiddle.net/XMEWu/1/

İlgili konular