2012-05-19 9 views
5

कहा जाता है, मैं प्रत्येक "जैसे" बटन (क्रोम एक्सटेंशन) के बाद एक तत्व जोड़ना चाहता हूं। चूंकि पेज को रीफ्रेश किए बिना समाचार फ़ीड में पोस्ट जोड़े जाते हैं, इसलिए मुझे एक ईवेंट श्रोता "DOMNodeInserted" जोड़ना होगा। लेकिन जब मैं after() इसके अंदर फ़ंक्शन डालने का प्रयास करता हूं, तो यह काम नहीं करता है।एक तत्व जोड़ें जब "DOMNodeInserted" ईवेंट

कोड:

$("#contentArea").addEventListener("DOMNodeInserted", function(event) { 
     $(".like_link").after('<span class="dot"> · </span><button class="taheles_link stat_elem as_link" title="תגיד תכל&acute;ס" type="submit" name="taheles" onclick="apply_taheles()" data-ft="{&quot;tn&quot;:&quot;&gt;&quot;,&quot;type&quot;:22}"><span class="taheles_default_message">תכל&acute;ס</span><span class="taheles_saving_message">לא תכלס</span></button>'); 
     $(".taheles_saving_message").hide(); 
    }); 

जब मैं बदल $("#contentArea")document को यह सब पेज दुर्घटनाओं।

उत्तर

7

आप jQuery में एक घटना श्रोता जोड़ना चाहते हैं, कि विधि नहीं है, corect रास्ता हमेशा होना चाहिए:

$(document or window).bind(your_event_name, function(event) { your_callback }); 
इसे ध्यान में रखकर

, आप लिख सकते हैं:

$(document).bind('DOMNodeInserted', function(event) { 

    alert('inserted ' + event.target.nodeName + // new node 
      ' in ' + event.relatedNode.nodeName); // parent 

}); 

या जो भी आपको डोम में नोड डालने पर हर बार करने की आवश्यकता होती है।


आपकी जानकारी के लिए

, आप addEventListener उपयोग करना चाहते हैं आप सादे उपयोग करने के लिए जावास्क्रिप्ट और नहीं jQuery की जरूरत है।

document.addEventListener("DOMNodeInserted", function() { 
    // your code 
}, false); 

संपादित करें: jQuery 1.7 पर के रूप में, '.on' समारोह के बजाय का उपयोग करें: http://api.jquery.com/on/


अन्य त्रुटि है कि आपके विधि के ऊपर आता है (अगर यह काम किया) है कि आप एक नोड डालने के रूप में आप हैं आपके आवेदन को तोड़ने और कॉल करेंगे DOMNodeInserted (आप एक नोड डाला है कारण) और कहा कि फिर से नोड डालें, और DOMNodeInserted फिर से फोन होगा ...

+०१२३५१६४१०६

आप देख सकते हैं कि क्या हो रहा है ...

मुझे लगता है कि आप सही विधि को सुनने और संलग्न सुझाव है कि आपकी span ...

+0

अगर मैं दूसरी विधि का उपयोग करें, क्या समारोह मैं बजाय के बाद() jQuery में इस्तेमाल करना चाहिए? –

+0

आप अपने श्रोता के अंदर 'DOMNodeInserted' के लिए नोड नहीं डाल सकते हैं या आपको एक अनंत लूप मिलता है ... नया नोड डालने के लिए' .after() 'का उपयोग करने के बाद,' DOMNodeInserted' को फिर से कॉल किया जाएगा) आपने एक डोम नोड डाला है) और इसी तरह, और चालू, और ... – balexandre

+0

हाँ आप सही हैं, क्या आपके पास कोई सुझाव है? मैंने पहले से ही कई चीजों की कोशिश की है जैसे setInterval() ... –

0

आप समस्या का सामना कर रहे हैं कि रन के तहत अपने कोड केवल एक बार jQuery .on() फ़ंक्शन में तो अपने उदाहरण नीचे की तरह addEventListner के तहत यह रखना चाहिए //

document.addEventListener('DOMNodeInserted', function(e) { 
    $("selector").on('DOMNodeInserted', function(e) { 
     //your code which you want to execute each time DOMNodeInserted 
    }); 
}); 
संबंधित मुद्दे