2010-02-27 3 views
5

Ищете помощь с моим кодом jQuery.jQuery форма фокуса создание элемента

Я создаю окно модального, используя simplemodal plugin

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

Вот мой текущий код ..

$('#showModal a').live('click',(function(){ 
     // Build Modal Box Container And Add to Page  
     $('<div id="osx-modal-content">\ 
      <div id="osx-modal-title"><h2>Please explain this song.</h2></div>\ 
      <div id="osx-modal-data"> \ 
      <p class="loaderGif"> <img src="http://localhost:8500/mxRestore/images/ajax-loader.gif"> </p>\ 
     </div>\ 
     </div>').appendTo('body'); 

     //Set Modal Box Options     
     $("#osx-modal-content").modal({ 
       // OPTIONS SET HERE 
       overlayClose:true, 
       onOpen:OSX.open, 
       onClose:OSX.close 
      }); 

     // I have a hidden form on the page...grab its HTML!! 
     var modalForm = $('#addTmWrapper').html(); 

     // Dynamically build a text area and add to the form... 
     // The text area from my hidden form wont show properly for some reason.....maybe a coldfusion issue 

     var textField= '' 
     textField+= '<textarea name=' + '"sMessage"' + 'id="sMessages"' + 'cols="62"' + 'rows="3"' + 'class="textarea word_count">' + '</textarea>' 

     // Add hidden form to modal box, add textarea to form.. 
     // Then show it      
     $('#osx-modal-data').html(modalForm).find('#addTmForm') 
       .prepend(textField) 
       .show(); 
    return false 
})); 

Хотите знать, как я могу сделать текстовое поле имеет фокус, когда появится модальное окно?

Любая помощь будет признателен, спасибо

ответ

1

Чтобы дать фокус на элементе формы, используйте focus().

$('#myElement').focus() 
0

Непосредственно перед return false;, добавьте $('#sMessages').focus(); (см jQuery docs).

+0

да, попытался это раньше, но не кажется, что работать в этом случае, не зная, почему – namtax

+0

Hm. Возможно, вы захотите попробовать .prepend ($ (textField)), а не просто .prepend (textField) - у него будет сначала создать элемент jQuery, а затем вставить его. Это может помочь. В качестве альтернативы вы можете поместить $ ('# sMessages'). Focus(); в блоке setTimeout миллисекунды или двух. Браузеру может понадобиться мгновение, прежде чем он сможет найти новую текстовую область. – kevingessner

0

использование

$('selector').trigger('focus'); 

вместо

$('selector').focus(); 

($ (...). Фокус (функция() {}) связывает функцию, чтобы сосредоточиться событие не делать фокус.)

+0

не работает ни .. strange, может быть, какая-то причуда с модальным полем – namtax

+0

@takpar - 'focus (function() {})' binds. 'focus()' триггеры. – user113716

1

попробовать это:

var aSet = $('selector'); 
aSet[0].focus(); 

фокус выше применяется к элементу, а не к объекту jQuery.

+0

также, похоже, не работает, к сожалению – namtax

0

Заверните его в тайм-аут, чтобы заставить его работать: как это было сделано here

setTimeout(function(){ 
    $('selector').focus(); 
}, 0);