2013-04-05 11 views
7

मेरा एप्लिकेशन $ (दस्तावेज़) के बाद डीओएम में कुछ तत्व जोड़ता है। पहले ही कहा जा चुका है। मैं jQuery का उपयोग कर रहा हूं 1.9.0JQuery "प्रकट होने पर" घटना

निम्नलिखित उदाहरण काम करता है।

$(document).on("click", "#box-descr", function(evt) { 
    console.log("I showed up"); 
}); 

हालांकि, जब मैं स्क्रीन पर तत्व प्रकट होता हूं तो मैं उस फ़ंक्शन को निष्पादित करना चाहता हूं। मैं इस उद्देश्य के लिए http://api.jquery.com/category/events/

असल में यह एक एकल पृष्ठ एप्लिकेशन है, इसलिए दस्तावेज़ तैयार केवल एक बार कहा जाता है लेकिन तत्व स्क्रीन के अंदर और बाहर आते हैं क्योंकि उपयोगकर्ता UI के साथ इंटरैक्ट करता है।

+0

'जब यह प्रकट होता है' आप कैसे परिभाषित करते हैं? यानी जब यह डोम में लोड हो गया है, या जब इसे किसी अन्य jQuery कोड द्वारा दृश्यमान किया गया है? – BenM

+0

या जब तत्व स्वयं दिखाई देता है, लेकिन व्यूपोर्ट में नहीं, और उपयोगकर्ता इसे स्क्रॉल करता है? – Tommi

+0

क्षमा करें, मेरा मतलब था कि इसे पूरी तरह से डीओएम –

उत्तर

8

हो सकता है आप चाहते हैं .ready() समारोह:

$("#box-descr").fadeIn(1000, function(){ 
    console.log("I showed up"); 
}); 

अपडेट::

$("#box-descr").ready(function(){ 
    console.log("I showed up"); 
}); 

या यदि आप इसे में fading रहे हैं @Jeff तियान के comment-

आपको घटना को किसी भी निकटतम स्थैतिक pa को सौंपने की आवश्यकता है किराए या document इस तरह करने के लिए:

$(document).on("ready", "#box-descr", function(){ 
    console.log("I showed up"); 
}); 
+1

आह में जोड़ा गया है, मैंने $ (दस्तावेज़) .on ("तैयार", "# बॉक्स-descr", फ़ंक्शन (evt) ... आपका समाधान काम किया धन्यवाद! –

+0

यदि आप गतिशील रूप से दस्तावेज़ में '# box-desc' संलग्न करते हैं तो काम नहीं करते हैं। –

+0

@JeffTian EduardGamonal द्वारा पहली टिप्पणी की जांच करें। यही तरीका है कि यदि आपका तत्व दस्तावेज़ में गतिशील रूप से जोड़ा गया है। – Jai

1

मुझे लगता है कि अगर आप घटना जब लक्षित तत्व डोम में जोड़ा जाता है ट्रिगर कर सकते हैं कि आप पूछ रहे हैं। अगर आप यह नहीं चाहते हैं तो मुझे बताएं।

$(document).on('click', '#box-descr', function(evt) { 
    console.log("I showed up"); 
}); 

// Later in your code you add the element to the DOM 
$('<div />', { id : 'box-descr' }).appendTo('body'); 

// Then trigger the click event for the added element 
$('#box-descr').trigger('click'); 

आशा है कि है कि तुम क्या

लिए देख रहे हैं आप के लिए

$('<div />', { id : 'box-descr' }).appendTo('body').trigger('click'); 
2

घटनाक्रम इस छोटा कर सकते हैं अच्छे हैं लेकिन उपस्थिति के लिए कोई मूल घटना है, क्योंकि, जब एक घटनाओं को जानने की आवश्यकता होती है आइटम जोड़ा जाता है ताकि ईवेंट मैन्युअल रूप से ट्रिगर किया जा सके। आप कुछ की उपस्थिति के लिए परीक्षण करने के लिए मतदान का उपयोग कर सकते हैं और जब ऐसा प्रतीत होता है तो कोई कार्रवाई कर सकता है। यह आपके नियंत्रण के बाहर जोड़े गए सामग्री के लिए बहुत अच्छा काम करता है, जैसे कि उपयोगकर्ता इनपुट, AJAX, या अन्य प्रोग्राम से।

setInterval(function() { 
    $('.my-element-class:not(.appeared)') 
     .addClass('appeared') 
     .each(function() { 
      console.log("here I am!") 
     }); 
}, 250); 

इस वर्ग के नाम से एक तत्व की उपस्थिति (या किसी अन्य चयनकर्ता मापदंड आपूर्ति) के लिए 4 बार प्रत्येक दूसरे की जाँच करेगा और जब कोई नया आइटम प्रकट होता है कोड चलाते हैं। एक बार आइटम को देखा जाने के बाद। उस आवृत्ति को दोबारा पता लगाने से रोकने के लिए जोड़ा गया वर्ग जोड़ा जाता है। यदि आप केवल एक उपस्थिति के लिए परीक्षण करना चाहते हैं तो आप पहचान के बाद मतदान को सरल बना सकते हैं और मतदान बंद कर सकते हैं।

var testAppearTmr = setInterval(function() { 
    if ($('.my-element-class').length) { 
     clearInterval(testAppearTmr); 
     console.log("here I am!") 
    } 
}, 250); 

jQuery appear प्लगइन इन तकनीकों के आसपास बनाया गया और एक बहुत अधिक विकल्प हैं, यदि आइटम दृश्य क्षेत्र में है के लिए परीक्षण की तरह है, लेकिन अगर तुम सब करना चाहते हैं कुछ मदों के लिए परीक्षा है जोड़ा जा रहा है डोम के लिए उपरोक्त कोड प्लगइन की तुलना में बहुत तेज है।

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