2009-09-16 17 views
40

में फ़ील्ड पर फ़ोकस सेट करें गतिशील रूप से लोड किए गए DIV के भीतर किसी विशिष्ट फ़ील्ड पर फ़ोकस सेट करने का उचित तरीका क्या है?गतिशील रूप से लोड किए गए DIV

$("#display").load("?control=msgs"); // loads the HTML into the DIV 
$('#display').fadeIn("fast"); // display it 
$("tex#header").focus();   // ?? neither that 
$("input#header").focus();  // ?? nor that 
$('#display', '#header').focus() // ?? nor that 
$("#header").focus();    // ?? nor that works 

निम्नलिखित एचटीएमएल display DIV में लाई गई है:

<div id="display"> 
<form id="newHeaderForm" class="dataform" action="/" method="post"> 
    <input id="to" type="hidden" value="22" name="to"/> 
    <dl> 
     <dt>Header</dt> 
     <dd> 
      <input id="header" class="large" type="text" name="header" value="" maxlength="128"/> 
     </dd> 
</form> 
</div> 

कई, बहुत धन्यवाद!

+0

क्या आप हमें जेनरेट किया गया एचटीएमएल भी दिखा सकते हैं? – Bela

+1

$ ('# display', '#header')। फोकस() – orip

उत्तर

57

भार() फ़ंक्शन एक असीमित कार्य है। लोड() कॉल समाप्त होने के बाद आपको फोकस सेट करना चाहिए, जो लोड() के कॉलबैक फ़ंक्शन में है, क्योंकि अन्यथा जिस तत्व का आप # शीर्षलेख द्वारा संदर्भित कर रहे हैं, अभी तक मौजूद नहीं है। उदाहरण के लिए:

$("#display").load("?control=msgs", {}, function() { 
    $('#header').focus(); 
}); 

मैं मुद्दों अपने आप को भी इस समाधान के साथ था, तो मैं कॉलबैक में एक setTimeout किया था और बनाने के लिए/वास्तव में/यकीन है कि तत्व मौजूद है समाप्त हो गया फोकस निर्धारित किया है।

+1

मैं इस तरह के समाधान देख रहा हूं डीओएम से जुड़े मुश्किल परिस्थितियों के संबंध में और "तैयार" होने के संबंध में। क्या कोई समय-समय पर 'सेटटाइमआउट' को कॉल करने का कोई विकल्प नहीं है और उम्मीद है कि यह पर्याप्त है? ऐसा लगता है कि ऐसा दृष्टिकोण अंतःस्थापित होने में बाध्य है। यह मुद्दा हाल ही में मेरे एक प्रश्न में उठाया गया था: http://stackoverflow.com/questions/21191336/getting-chrome-to-prompt-to-save-password-when- गतिशील- जनरेटिंग- theform-a – EleventyOne

+0

टाइमआउट समारोह कोणीय में भी मौजूद है। अन्य वाक्यविन्यास, लेकिन एक ही समाधान। मुझे टाइमआउट के साथ सही रास्ते पर सेट करने के लिए धन्यवाद। '$ टाइमआउट (फ़ंक्शन() { \t \t \t \t \t $ window.document.getElementById ('name')। फोकस(); \t \t \t \t}); – Michel

12

क्या आपने बस आईडी द्वारा चयन करने का प्रयास किया है?

$("#header").focus(); 

आईडी के रूप में देखना अद्वितीय होना चाहिए, और अधिक विशिष्ट चयनकर्ता होने की आवश्यकता नहीं है।

+0

काम करना चाहिए बहुत धन्यवाद, लेकिन यह काम नहीं करता है; ( – MrG

+1

आपको इसे अंदर दस्तावेज़ रखना चाहिए था। पहले से ही – Omu

3

$("#header").focus(); 

तो काम नहीं कर रहा है कि वहाँ हेडर के आईडी के साथ अपने पृष्ठ पर एक और तत्व है?

$("#header") चलाने के लिए फ़ायरबग का उपयोग करें और देखें कि यह क्या लौटाता है।

1

गतिशील रूप से जोड़े गए आइटम को डोम में जोड़ा जाना है ... clone().append() इसे डोम में जोड़ता है ... जो इसे jquery के माध्यम से चुना जा सकता है।

3
$("#display").load("?control=msgs", {}, function() { 
    $('#header').focus(); 
}); 

मैंने कोशिश की लेकिन यह काम नहीं करता है, कृपया मुझे इस समस्या को हल करने के लिए और सलाह दें। आपकी मदद के लिए धन्यवाद

+0

क्या आपने <इनपुट आईडी = "हेडर" ..> जैसे फ़ील्ड की आईडी सेट की थी? फ़ायरफ़ॉक्स में अपने कोड का परीक्षण करें और सही कंसोल के साथ त्रुटि कंसोल या क्रोम में सक्षम करें, इससे मदद मिल सकती है। – MrG

8

हां, ऐसा तब होता है जब एक तत्व में हेरफेर करना जो अभी तक मौजूद नहीं है (यहां कुछ योगदानकर्ताओं ने अद्वितीय आईडी के साथ एक अच्छा बिंदु भी बनाया है)। मैं एक समान मुद्दे में भाग गया। मुझे जल्द ही प्रस्तुत किए जाने वाले तत्व में हेरफेर करने वाले फ़ंक्शन पर एक तर्क पारित करने की आवश्यकता है।

यहां चेक किए गए समाधान ने मेरी सहायता नहीं की। अंततः मुझे एक ऐसा मिला जो बॉक्स के ठीक बाहर काम करता था। और यह बहुत सुंदर है, बंद - बंद।

बजाय:

$('#header').focus(); 
or the tempting: 
setTimeout($('#header').focus(), 500); 

इस प्रयास करें:

setTimeout(function() { $('#header').focus() }, 500); 

मेरे कोड में, तर्क गुजर परीक्षण, इस काम नहीं किया, टाइमआउट को नजरअंदाज कर दिया गया था:

setTimeout(alert('Hello, '+name), 1000); 

यह काम करता है, टाइमआउट टिक:

setTimeout(function() { alert('Hello, '+name) }, 1000); 

यह बेकार है कि w3schools इसका उल्लेख नहीं करता है।

क्रेडिट्स पर जाएं: makemineatriple.com

उम्मीद है कि यह किसी ऐसे व्यक्ति की सहायता करता है जो यहां आता है।

martas

+0

ग्रेट, यह काम कर रहा है। धन्यवाद :-) – Biki

+0

सेटटाइमआउट प्रतीत होता है जब तत्व '.focus() 'के आवेदक से पहले अच्छी तरह से और वास्तव में मौजूद है। हालांकि, 500 का मूल्य शायद अधिक है। 10 के साथ मेरे लिए ठीक काम करता है :) – Nick

+0

महान काम किया, चीयर्स। – Leo

2

Omu के रूप में बताया, तो आप एक दस्तावेज़ तैयार समारोह में फोकस सेट करना होगा। jQuery इसे आपके लिए प्रदान करता है। और एक आईडी पर चयन करें। उदाहरण के लिए, यदि आपके पास लॉगिन पृष्ठ है:

$(function() { $("#login-user-name").focus(); }); // jQuery rocks! 
1

यह पृष्ठ लोड पर चलता है।

<script type="text/javascript"> 
    $(function() { 
     $("#header").focus(); 
    }); 
</script> 
0
$(function(){ 
    $('body').on('keypress','.sobitie_snses input',function(e){ 
     if(e.keyCode==13){ 
      $(this).blur(); 
      var new_fild = $(this).clone().val(''); 
      $(this).parent().append(new_fild); 
      $(new_fild).focus(); 
     } 
    }); 
}); 

त्रुटि के सबसे क्योंकि यू गलत चीज़ का इस्तेमाल prorepty या समारोह सेट करने के लिए कर रहे हैं। Console.log (new_fild) का प्रयोग करें; यह देखने के लिए कि यू वस्तु यू प्रॉपर्टी या फ़ंक्शन सेट करने का प्रयास करती है।

संबंधित मुद्दे