2010-06-15 10 views
5

मेरे पास छवियों को गतिशील रूप से एक पृष्ठ में जोड़ा जा रहा है, मुझे लगता है कि 'लोड' ईवेंट लाइव() के साथ गतिशील रूप से काम करने में सक्षम नहीं है।लाइव() कीवर्ड गतिशील एचटीएमएल छवियों के साथ लोड पर काम नहीं कर रहा है

इस कोड मैं वर्तमान में है:

$('#largeImg' + nextUniqueItemID).hide(); 
$('#largeImg' + nextUniqueItemID).live('load' , function() { 
    $('#loader' + nextUniqueItemID).hide(); 
    $('#largeImg' + nextUniqueItemID).show(); 
}); 

'#largeImg' + nextUniqueItemID एक छवि है कि पेज के लिए जोड़ा गया समारोह में पहले और '#largeImg' + nextUniqueItemID एक चित्र लोड किया जा रहा होता है।

मुझे लगता है कि मैं "लाइव" का दुरुपयोग कर रहा हूं क्योंकि इसे वास्तव में श्रोता की आवश्यकता नहीं है लेकिन तुरंत ईवेंट को ट्रिगर करने के लिए।

आपकी सभी मदद के लिए धन्यवाद। मैंने "बांध" की कोशिश की और कभी ट्रिगर नहीं किया। मैंने लोड से दूर करने की भी कोशिश की, लेकिन यह काम नहीं किया। क्या किसी ईवेंट में श्रोता को संलग्न करने का कोई तरीका है जो इंगित करेगा कि छवि लोड होने पर कब संकेतित किया गया था?

उत्तर

-1

जो मैंने समाप्त कर दिया वह लोड छवि को सीधे मेरी छवि के लोड = "" ईवेंट में डाल रहा था। वह काम किया।

0

मैं प्रलेखन पर दिखेगा: http://api.jquery.com/live/

* In jQuery 1.3.x only the following JavaScript events (in addition to custom events) could be bound with .live(): click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, and mouseup. 

    * As of jQuery 1.4 the .live() method supports custom events as well as all JavaScript events. As of jQuery 1.4.1 even focus and blur work with live (mapping to the more appropriate, bubbling, events focusin and focusout). 
    * As of jQuery 1.4.1 the hover event can be specified (mapping to "mouseenter mouseleave"). 

जो भी निर्माण ट्रिगर कर रहा है भी छिपाने और आइटम है कि आप load घटना के साथ प्रयोग कर रहे हैं के शो को गति प्रदान करना चाहिए।

1

यह कोड कहां स्थित है ??

$('#largeImg' + nextUniqueItemID).hide(); 
$('#largeImg' + nextUniqueItemID).live('load' , function() { 
$('#loader' + nextUniqueItemID).hide(); 
$('#largeImg' + nextUniqueItemID).show(); 
}); 

कि अगर jQuery ajax के एक कॉलबैक अंदर है, आप .live() उपयोग करने के लिए, .bind() का उपयोग नहीं है।

6

मुझे लगता है कि jQuery दस्तावेज़ इस पर थोड़ा भ्रामक हो सकता है, जब तक कि यह समस्या को दूर करने के लिए वास्तव में कुछ खास नहीं कर रहा हो।

छवियों जैसे तत्वों पर लोड घटनाएं बबल नहीं होती हैं। 1,2

क्योंकि वे बबल सामने नहीं करते हैं, document यह नहीं जानता कि एक लोड घटना निकाल दिया गया था।

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

उदाहरण के लिए, मान लीजिए आप निम्नलिखित लाइव इवेंट रजिस्टर करने के लिए किए गए:

$("#container > input").live("change", function() { 
    alert("changed"); 
}); 

तो jQuery यदि वह पहले से (समान करने के लिए) मौजूद नहीं है दस्तावेज़ वस्तु पर एक परिवर्तन घटना श्रोता जोड़ना होगा:

$(document).bind("change", function() { 
    .. 
}); 

जब कोई भी परिवर्तन घटना दस्तावेज़ पर बुलबुले हो जाती है, तो यह प्रत्येक पंजीकृत चयनकर्ता के माध्यम से चलता है, और जांच करता है कि किसी दिए गए चयनकर्ता के परिणामस्वरूप नोड्स में से कोई भी ईवेंट लक्ष्य (तत्व जिस से उत्पन्न हुआ है) शामिल है। यदि यह मौजूद है, तो उस घटना लक्ष्य के लिए संबंधित "लाइव" ईवेंट हैंडलर निकाल दिया जाता है।

यदि दस्तावेज़ पहले स्थान पर नहीं जानता है तो इनमें से कोई भी संभव नहीं है।

जब तक मैं गलत नहीं हूं और jQuery के पास ऐसा करने के लिए कुछ गुप्त सॉस है, तो आपको लाइव के माध्यम से इसे लोड करने के बजाय सीधे लोड ईवेंट को बांधना चाहिए।

$("selector").bind("load", function() { .. }); 
0

क्या आपने प्रत्यक्ष आईडी के बजाय एक विशेषता चयनकर्ता का उपयोग करने का प्रयास किया है?

$('#largeImg' + nextUniqueItemID).hide(); 
$('[id=largeImg' + nextUniqueItemID + ']').live('load', function() { 
    $('#loader' + nextUniqueItemID).hide(); 
    $('[id=largeImg' + nextUniqueItemID + ']').show(); 
}); 
संबंधित मुद्दे