2010-06-30 29 views
13

पर क्लिक करें मेरे पास एक दिलचस्प स्थिति है। मुझे लाइव क्लिक ट्रिगर करने की आवश्यकता है, क्योंकि सरल क्लिक काम नहीं करता है।लाइव ट्रिगर कैसे करें() jquery

$('.text').trigger('click'); 

लेकिन मैं कुछ इस तरह की जरूरत है::

$('.text').trigger(live('click' ...)); 

या इस समस्या को दूर करने के लिए कुछ

यह है कि मैं क्या है।

$(".Sets a.largeImage").fancybox({ 

    'onComplete': function(){ 
    return errorimage(myurl); 
    } 

}); 

function errorimage(url) { 

    $("#fancybox-img").live('click', function(){ 
    $('.lightbox:first').trigger('click'); 
    }); 

    $('#fancybox-img').trigger('click'); 

} 

विचार यह है कि मैं $('.lightbox:first').trigger('click'); ट्रिगर करना चाहते हैं, लेकिन लाइव मोड में है, क्योंकि साधारण क्लिक काम नहीं करता:

यह मेरा कोड है!

धन्यवाद !!!!

+1

आप इस समस्या के संदर्भ बता सकते हैं? –

उत्तर

10

सबसे अच्छा समाधान आपके क्लिक हैंडलर को एक अलग फ़ंक्शन में रखना होगा।

फिर आप इस फ़ंक्शन को लाइव क्लिक हैंडलर से कॉल कर सकते हैं और जब आप मैन्युअल रूप से क्लिक को ट्रिगर करना चाहते हैं।

+0

मैं मैन्युअल रूप से ट्रिगर नहीं कर सकता, क्योंकि इस फक्शन को मुझे कॉल करना है, जब कोई अन्य फ़ंक्शन "पूर्ण" – AlexC

+1

आपका क्या मतलब है? आप फ़ंक्शन को 'लाइव' हैंडलर और अन्यत्र ('ऑनकंपलेट' सहित) में कॉल कर सकते हैं – SLaks

+0

यदि फ़ंक्शन को फ़ंक्शन करने के लिए उचित संदर्भ की आवश्यकता है तो आप केवल फ़ंक्शन को कॉल नहीं कर सकते हैं; '.live' का उपयोग करते समय सामान्य स्थान हो सकता है। सरल मामलों के लिए हालांकि आप केवल संदर्भ या सामान्य संदर्भ प्रदान कर सकते हैं ... लेकिन केवल साधारण मामलों के लिए। – srcspider

-4

मैं belive के रूप में ट्रिगर केवल यह बाध्य करने के लिए नहीं, एक बाध्य तत्व को सक्रिय किया जाता है आप बस अपना पहला उदाहरण का उपयोग कर सकते ..

इसलिए जब आपका कार्य करें:

$('#someElement').live('click',function(){./*..*/}); 

यह एक ही है

$('#someElement').click(function(){./*..*/}); 

पहले व्यक्ति के अलावा प्रत्येक AJAX अनुरोधों पर नए HTML के लिए भी जांच करता है और फिर से बांधता है।

तो बस कार्य करें:

$('div.class').trigger('click'); 

और यह, लाइव तत्वों

+1

गलत। 'लाइव' 'बाइंड' से बहुत अलग है। आप इसे 'लाइवक्वरी' से भ्रमित कर रहे हैं, जो इस तरह काम करता है। – SLaks

+0

हाँ मैं समझता हूं कि लाइव अलग है लेकिन एक बार AJAX सामग्री वापस आने और डीओएम में इंजेक्शन देने के बाद, लाइव हो जाती है और कार्य को बंद करने से पहले तत्वों को बांधता है, एक बार डोम के अंदर और क्लिक करने के लिए बाध्य होता है, ट्रिगर भी काम करना चाहिए "नई सामग्री" के लिए – RobertPitt

+3

आप गलत हैं। लाइव किसी तत्व को बाध्य नहीं करता है। 'लाइव' को कॉल करने से रूट तत्व पर ईवेंट संभाल जाएगा, जो बुलबुले की हर घटना को देखेगा। फिर यह 'e.target' की जांच करता है और उस लक्ष्य के लिए सदस्यता लेने वाले किसी भी हैंडलर को उठाता है। – SLaks

2

मुझे लगता है कि समस्या आप का सामना कर रहे है को गति प्रदान करना चाहिए कि live() और delegate()DOM element के लिए एक ईवेंट हैंडलर बाध्य नहीं है/jQuery object स्वयं, लेकिन कुछ parent node पर। उदाहरण के लिए live(), एक हैंडलर को document.body पर बांध देगा जो event.target की जांच करता है। सरल शब्दों में, यह event bubbling का उपयोग करता है, यह live events का विचार है।

दूसरे शब्दों में, लाइव का उपयोग कर, ऐसा

$(document.body).trigger({ 
    type: 'click', 
    target: $('.text')[0] 
}); 

अद्यतन

दुर्भाग्य घटना ट्रिगर करना, कि काम करने के लिए प्रतीत नहीं होता संभव हो सकता है। मैंने currentTarget और relatedTarget सेट करने का भी प्रयास किया। .live() कहां हैडलर को बांधता है? कोई?

0

जैसा कि मुझे एक समान स्थिति का सामना करना पड़ रहा था, मुझे एसएलएक्स का समाधान पूरी तरह से सहायक पाया गया। हालांकि, संलग्न .live ("क्लिक करें", हैंडलरएफएन) और।एक ही तत्वों के लिए बाध्य ("क्लिक करें", हैंडलरएफएन) विरोधाभासी प्रतीत होता है (मुझे नहीं पता कि इस तरह के मामले में प्राथमिकता नियम लागू होते हैं)। लेकिन यदि आप ट्रिगर के लिए "क्लिक" की बजाय कस्टम ईवेंट का उपयोग करते हैं तो यह ठीक काम करता है।

$(".elems").bind("customEvent", handlerFn); 
$(".elems").live("click", handlerFn); 

$(".elems").trigger("customEvent"); 

function handlerFn() { 
} 
3

मुझे लाइटबॉक्स 2 का उपयोग करते समय एक ही समस्या थी जो लाइव() का उपयोग करके क्लिक ईवेंट को बांधता है। आप देख सकते हैं मैं घटना वाले सभी चित्र लाइटबॉक्स उपयोग कर रहे हैं के बाद ही तैयार कर रहे हैं ट्रिगर किया गया था

jQuery**('a[rel^="lightbox"]')**.ready(function() { 
jQuery("#myimglink").trigger("click"); 
}) 

: मेरे मामले में समाधान इस तरह घटना को गति प्रदान करने के लिए था। उम्मीद है कि यह आपको सभी की मदद करेगा - यह स्टैक ओवरफ्लो में मेरा पहला योगदान है :)।

0

यह एक और तरीका है जो मेरे लिए काम करता है।

$('#test').live('click', function() { 
    alert("It works!");    
}); 

$('#test')[0].click(); 

महत्वपूर्ण यहाँ हिस्सा है:

$('#test')[0].click(); 
संबंधित मुद्दे