2010-05-17 15 views
7

jquery में मैंने <li> तत्व को एक अनियंत्रित सूची में जोड़ा है।jquery गतिशील सामग्री पर ध्यान केंद्रित सेट?

मैं नव निर्मित <li> पर कैसे ध्यान केंद्रित करते हैं?

अगर मैं निम्न कार्य करें:

$("ul").append('<li><input type="text" value="Hi!"></li>'); 
$("li:last").focus(); //doesn't work because new <li> isn't in dom yet 

फोकस काम नहीं करता है, जैसा कि ऊपर उल्लेख किया।

मैं jQuery 1.4.2 पता एक live() ईवेंट हैंडलर जो आप गतिशील तत्व जोड़े के लिए ईवेंट हैंडलर्स लोड की अनुमति देता है, लेकिन मुझे यकीन है कि मैं गलत क्या कर रहा नहीं कर रहा हूँ:

$(document).ready(function() { 

    $('li').live('load', function() { 
     alert("hi!"); 
     $("li:last").focus(); 
    }); 
}); 
+0

'input' तत्व एक ** खाली ** तत्व है, यह एक अंत टैग नहीं होना चाहिए। आप शायद एक मूल्य विशेषता में 'हाय!' रखना चाहते हैं। – Quentin

+0

@ डेविड, धन्यवाद। यह वास्तविक कोड नहीं है, लेकिन मैं वैसे भी इसे ठीक कर देंगे। – Alan

+0

2500 विचार और एक एकल अपवर्त नहीं। अच्छा समय। – Alan

उत्तर

7

आप केवल सेट कर सकते हैं उन तत्वों पर ध्यान केंद्रित करें जो फोकस धारण कर सकते हैं। डिफ़ॉल्ट रूप से एक सूची आइटम नहीं कर सकता है। यह (, कि क्या append करता है यह डोम में है)

सामान्य आप ध्यान धारण करने के लिए डिज़ाइन किया गया तत्वों का उपयोग करना चाहिए, क्योंकि यह डोम में नहीं है, यही कारण है कि अपने पहले उदाहरण में विफल रहता है है (यानी इनपुट पर फोकस सेट करें सूची आइटम नहीं)। आप भी (लेकिन यह कम पीछे संगत और कम तार्किक है) एचटीएमएल 5 के tabindex (शायद इसे 0 पर सेट कर सकते हैं) का उपयोग कर सकते हैं।

onload काम नहीं करेगा क्योंकि सूची आइटम बाहरी सामग्री लोड नहीं करते हैं।

+0

धन्यवाद। यह काम किया। – Alan

2

आप इसे आजमा सकते हैं, $(YourElement).trigger("focus")

0

यह एक पुरानी पोस्ट मुझे पता है, लेकिन इस समस्या को हल करने के लिए एक आसान तरीका अपने HTML में एक पाठ इनपुट बनाने के लिए है और इसके सीएसएस करने के लिए "प्रदर्शन: कोई नहीं;" की स्थापना की। एलआई के क्लिक इवेंट पर, इस इनपुट में फोकस सेट करें और इसकी कीप्रेस घटनाओं को सुनें।

मैंने इसे किया है और यह एक आकर्षण की तरह काम करता है।

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