दिलचस्प पोस्ट
नॉर्मल में 1D एरे के लिए रोलिंग विंडो? एमवीसी 5 गतिशील पंक्तियों के साथ शुरूआती चयन आईटम NHibernate क्वेरी प्राप्त करने के साथ ही कई एसक्यूएल क्वेरीज़ और डीबी हिट विरासत और टेम्पलेट्स में सी ++ – क्यों अदृश्य तरीके हैं? MongoDB संग्रह में किसी ऑब्जेक्ट सरणी में केवल पूछे गए तत्व को पुनर्प्राप्त करें लॉग के बिना एसक्यूएल में टेबल का बड़ा डेटा कैसे हटाना है? Symfony2 टिग टेम्पलेट्स में कॉन्फ़िगर पैरामीटर कैसे प्राप्त करें एंड्रॉइड के फ़ॉन्टमैट्रिक में ऊपर, चढ़ाई, बेसलाइन, वंश, नीचे, और अग्रणी का अर्थ ArrayIndexOutOfBoundsException जब किसी सरणी के सभी तत्वों के जरिए घुमाने जाते हैं जहां हालत नल का उपयोग करते हुए रेलगाड़ी रेल करता है + ऑपरेटर के साथ जावा स्ट्रिंग समाकलन सी ++: कैसे एक टेम्प्लेट टाइप की आवश्यकता होती है जो दूसरे से प्राप्त होती है ट्विटर बूटस्ट्रैप रिमोट मोडल हर बार एक ही सामग्री दिखाती है फ़ाइल बनाने के लिए एजेक्स के माध्यम से ब्लाको पास करें एमएसवीसी में त्रुटि एलएनके2019 जोड़ने, __imp__ उपसर्ग के साथ अनसुलझे प्रतीकों, लेकिन स्थैतिक लिब से होना चाहिए

अगर मैं बाइंड के साथ एक ईवेंट हैंडलर को बाध्य नहीं किया है या पहले से ही क्लिक किया है तो क्या मैं एक <a> लिंक का पालन करने के लिए jquery click () पर कॉल कर सकता हूं?

मेरे पास जावास्क्रिप्ट में एक टाइमर है, जो समय बीत जाने के बाद एक अन्य पृष्ठ पर जाने के लिए एक लिंक पर क्लिक करने के लिए अनुकरण की आवश्यकता होती है। ऐसा करने के लिए मैं jQuery के click() फ़ंक्शन का उपयोग कर रहा हूं। मैंने $().trigger() उपयोग किया है $().trigger() और window.location भी, और मैं इसे तीनों के साथ काम करने के लिए काम कर सकता हूं

मैंने click() साथ कुछ अजीब व्यवहार देखा है और मैं समझने की कोशिश कर रहा हूं कि क्या होता है और क्यों

मैं इस प्रश्न में जो भी वर्णन करता हूं, उसके लिए मैं फ़ायरफ़ॉक्स का उपयोग कर रहा हूं, लेकिन मुझे यह भी पता है कि इसके साथ अन्य ब्राउज़र्स क्या करेंगे।

अगर मैं $('a').bind('click',fn) उपयोग नहीं किया है $('a').bind('click',fn) या $('a').click(fn) एक ईवेंट हैंडलर सेट करने के लिए $('a').click(fn) , फिर कॉल करें $('a').click() कुछ भी नहीं लगता है यह इस घटना के लिए ब्राउज़र के डिफ़ॉल्ट हैंडलर को कॉल नहीं करता है, क्योंकि ब्राउज़र नए पेज को लोड नहीं करता है।

हालांकि, अगर मैं पहले एक ईवेंट हैंडलर सेट करता हूं, तो यह अपेक्षा के अनुरूप काम करता है, भले ही ईवेंट हैंडलर कुछ भी न करे

 $('a').click(function(){return true;}).click(); 

यह नया पृष्ठ लोड करता है जैसे कि मैंने स्वयं को क्लिक किया था

तो मेरा सवाल दुगुना है: क्या यह अजीब व्यवहार है क्योंकि मैं कुछ गलत कर रहा हूं? और अगर मैं अपने खुद के एक हैंडलर नहीं बनाया है तो click() कॉलिंग डिफ़ॉल्ट व्यवहार के साथ कुछ नहीं करता कॉल करता है?

संपादित करें:

जैसा कि हॉफ़मैन ने निर्धारित किया कि जब उन्होंने मेरे परिणामों की नकल करने की कोशिश की, तो मैंने ऊपर दिए गए परिणाम वास्तव में नहीं किया। मुझे यकीन नहीं है कि कल मैंने जो घटनाएं देखीं, उसके कारण क्या हुआ, लेकिन आज मैं निश्चित हूं कि प्रश्न में मैंने जो वर्णित किया वह नहीं था।

तो जवाब यह है कि आप ब्राउज़र में "नकली" क्लिक नहीं कर सकते हैं और यह कि सभी jQuery करता है, आपके ईवेंट हैंडलर को कॉल करता है। आप पृष्ठ को बदलने के लिए अभी भी window.location का उपयोग कर सकते हैं, और यह मेरे लिए ठीक काम करता है

Solutions Collecting From Web of "अगर मैं बाइंड के साथ एक ईवेंट हैंडलर को बाध्य नहीं किया है या पहले से ही क्लिक किया है तो क्या मैं एक <a> लिंक का पालन करने के लिए jquery click () पर कॉल कर सकता हूं?"

दिलचस्प है, यह शायद jQuery के लिए एक "सुविधा अनुरोध" (यानी बग) है। तत्व पर एक jQuery ईवेंट बाँधते हुए, jQuery क्लिक ईवेंट केवल तत्व पर तत्व क्लिक पर क्लिक कार्रवाई (जिसे DOM पर क्लिक किया जाता है) को चालू करता है I आपको jQuery के मेलिंग सूचियों पर जाना चाहिए ( http://forum.jquery.com/ ) और इसकी रिपोर्ट करें। यह वांछित व्यवहार हो सकता है, लेकिन मुझे ऐसा नहीं लगता।

संपादित करें:

मैंने कुछ परीक्षण किया और आपने जो कहा वह गलत है, भले ही आप 'ए' टैग पर किसी फ़ंक्शन को बाँध लें, फिर भी वह आपको href विशेषता द्वारा निर्दिष्ट वेबसाइट पर नहीं ले जाता है। निम्न कोड आज़माएं:

 <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> <script> $(document).ready(function() { /* Try to dis-comment this: $('#a').click(function () { alert('jQuery.click()'); return true; }); */ }); function button_onClick() { $('#a').click(); } function a_onClick() { alert('a_onClick'); } </script> </head> <body> <input type="button" onclick="button_onClick()"> <br> <a id='a' href='http://www.google.com' onClick="a_onClick()"> aaa </a> </body> </html> 

यह कभी भी google.com तक नहीं जाता है जब तक आप सीधे लिंक पर क्लिक नहीं करते (बिना टिप्पणी किए गए कोड के साथ या बिना)। यह भी ध्यान रखें कि यदि आप लिंक पर क्लिक ईवेंट को बाँध भी करते हैं, तो एक बार बटन पर क्लिक करने के बाद भी यह बैंगनी पर नहीं जाता है। यह केवल बैंगनी जाता है यदि आप सीधे लिंक पर क्लिक करते हैं

मैंने कुछ शोध किए और ऐसा लगता है कि .click 'a' टैग के साथ काम करने के लिए नहीं लगता है क्योंकि ब्राउज़र जावास्क्रिप्ट के साथ "नकली क्लिकिंग" का समर्थन नहीं करता है। मेरा मतलब है, आप जावास्क्रिप्ट के साथ एक तत्व "क्लिक" नहीं कर सकते 'ए' टैग से आप इसके onClick ईवेंट को ट्रिगर कर सकते हैं लेकिन लिंक रंग बदल नहीं पाएंगे (विज़िट किए गए लिंक रंग में, डिफ़ॉल्ट रूप से अधिकांश ब्राउज़रों में बैंगनी है)। इसलिए यह $ () बनाने का अर्थ नहीं होगा। Href विशेषता पर जाने के कार्य के बाद से 'एक' टैग के साथ इवेंट काम पर क्लिक करें, onClick ईवेंट का हिस्सा नहीं है, लेकिन ब्राउज़र में कठोर पड़ता है।

एक अन्य विकल्प निश्चित रूप से सिर्फ वेनिला जावास्क्रिप्ट का उपयोग करना है:

 document.getElementById("a_link").click() 

यदि आप $.click फ़ंक्शन के लिए कोड देखते हैं तो मुझे यह शर्त है कि यह एक सशर्त बयान है जो यह देखने के लिए जांचता है कि क्या उस तत्व के पास click होने वाले ईवेंट के लिए श्रोताओं पंजीकृत हैं, क्यों लिंक से केवल href विशेषता नहीं है और मैन्युअल रूप से पेज स्थान बदलते हैं?

  window.location.href = $('a').attr('href'); 

संपादित करें: यह इसलिए है कि यह trigger फंक्शन, संस्करण 1.3.2 के लिए jQuery के माध्यम से क्लिक नहीं करता है:

  // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links) if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false ) event.result = false; // Trigger the native events (except for clicks on links) if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) { this.triggered = true; try { elem[ type ](); // prevent IE from throwing an error for some hidden elements } catch (e) {} } 

उसके बाद कॉल करने वाले हैंडलर (यदि कोई हैं) तो jQuery ऑब्जेक्ट पर एक ईवेंट ट्रिगर करता है। हालांकि यह केवल क्लिक ईवेंट्स के लिए देशी हैंडलर्स को कॉल करता है यदि तत्व लिंक नहीं है मुझे लगता है कि यह किसी कारण के लिए उद्देश्यपूर्ण किया गया था यह सच होना चाहिए कि क्या किसी ईवेंट हैंडलर को परिभाषित किया गया है या नहीं, इसलिए मुझे यकीन नहीं है कि आपके मामले में एक ईवेंट हैंडलर को संलग्न करने के कारण उसने onClick हैंडलर को फोन किया। आपको ऐसा करना होगा जो मैंने किया था और निष्पादन के माध्यम से कदम यह देखने के लिए कि उसे कहां बुलाया जा रहा है।

एंकर टैग पर हैंडलर्स को क्लिक करें, जो कि jQuery में एक खास मामला है।

मुझे लगता है कि आप एंकर की ऑनक्लिक इवेंट (ब्राउज़र द्वारा ज्ञात) और jQuery ऑब्जेक्ट के क्लिक इवेंट के बीच भ्रमित हो रहे हैं जो एंकर टैग के डोम की धारणा को लपेटते हैं।

आप यहां jQuery 1.3.2 स्रोत डाउनलोड कर सकते हैं ।

स्रोत के प्रासंगिक अनुभाग हैं लाइन 2643-2645 (मैंने इसे समझना आसान बनाने के लिए कई लाइनों में विभाजित किया है):

 // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links) if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false ) event.result = false; 

जेएस / jQuery प्रोग्राम के अनुसार "क्लिक किए गए" लिंक के डिफ़ॉल्ट व्यवहार का समर्थन नहीं करता है

आप क्या कर सकते हैं एक फॉर्म बनाते हैं और इसे जमा करें इस तरह आपको window.location का उपयोग करने की ज़रूरत नहीं है। स्थान या window.open , जो अक्सर ब्राउज़रों द्वारा अवांछित पॉपअप के रूप में अवरोधित होते हैं

इस स्क्रिप्ट में 2 अलग-अलग तरीके हैं: एक जो 3 नए टैब / विंडो खोलने की कोशिश करता है (यह केवल आईई और क्रोम में 1 में खोलता है, नीचे दी गई जानकारी) और एक लिंक क्लिक पर एक कस्टम इवेंट को सक्रिय करता है

यहां कैसे:

एचटीएमएल

 <html> <head> <script src="jquery-1.9.1.min.js" type="text/javascript"></script> <script src="script.js" type="text/javascript"></script> </head> <body> <button id="testbtn">Test</button><br><br> <a href="https://google.nl">GOOGLE</a><br> <a href="http://en.wikipedia.org/wiki/Main_Page">WIKI</a><br> <a href="https://stackoverflow.com/">SO</a> </body> </html> 

jQuery (script.js)

 $(function() { // Try to open all 3 links by pressing the button // - Firefox opens all 3 links // - Chrome only opens 1 of them without popup warning // - IE only opens 1 of them WITH popup warning $("#testbtn").on("click", function() { $("a").each(function() { var form = $("<form></form>"); form.attr( { id : "formform", action : $(this).attr("href"), method : "GET", // Open in new window/tab target : "_blank" }); $("body").append(form); $("#formform").submit(); $("#formform").remove(); }); }); // Or click the link and fire a custom event // (open your own window without following the link itself) $("a").on("click", function() { var form = $("<form></form>"); form.attr( { id : "formform", // The location given in the link itself action : $(this).attr("href"), method : "GET", // Open in new window/tab target : "_blank" }); $("body").append(form); $("#formform").submit(); $("#formform").remove(); // Prevent the link from opening normally return false; }); }); 

प्रत्येक लिंक तत्व के लिए यह क्या करता है:

  1. एक फॉर्म बनाएं
  2. इसे विशेषताओं दें
  3. इसे DOM में जोड़ें ताकि इसे सबमिट किया जा सके
  4. इसे भेजें
  5. DOM से फ़ॉर्म को निकालें, सभी निशान हटाने * बुराई हंसी डालें *

अब आपके पास एक नया टैब / विंडो लोड हो रहा है "https://google.nl" (या आप चाहते हैं कि कोई भी यूआरएल, इसे बदल दें)। दुर्भाग्य से जब आप एक से अधिक विंडो को इस तरह से खोलने का प्रयास करते हैं, तो आपको एक Popup blocked संदेश बार मिलता है, जब दूसरे को खोलने का प्रयास करते हैं (पहला भी अभी भी खोला गया है)।


इस पद्धति पर मुझे कैसे मिला, इसके बारे में और जानकारी यहां मिली है:

window.open या window.location.href का उपयोग किए बिना नई विंडो / टैब खोलना

एक हाइपरलिंक तत्व ट्रिगर करें जो तत्व के अंदर है जिसे आप jquery को जोड़ने के लिए करना चाहते हैं।

 <div class="TopicControl"> <div class="articleImage"> <a href=""><img src="" alt=""></a> </div> </div> 

आपकी स्क्रिप्ट में आप मुख्य कंटेनर को जोड़ने के लिए चाहते हैं, तो आप क्लिक ईवेंट को चाहते हैं। तब आप तत्व (प्रकार, वर्ग, आईडी) खोजने के लिए मानक jquery पद्धति का उपयोग करते हैं और क्लिक को आग लगाते हैं। क्या होता है jquery क्लिक को आग लगाने के लिए एक रिकर्सिव फ़ंक्शन में प्रवेश करता है और आप ईवेंट 'ई' और स्टॉपप्रेजेशन () फ़ंक्शन को लेते हुए पुनरावर्ती समारोह को तोड़ते हैं और झूठी वापसी करते हैं क्योंकि आप नहीं चाहते कि jquery को और कुछ भी करने पर लिंक को आग लगा दें।

 $('.TopicControl').click(function (event) { $(this).find('a').click(); event.stopPropagation(); return false; }); 

वैकल्पिक समाधान है कि कंटेनरों को तत्व में लपेटें और जगह के अंदर कंटेनर के रूप में जगह ले ली जाए। W3c मानकों के अनुरूप करने के लिए ब्लॉक प्रदर्शित करने के लिए स्पेन्स सेट करें

यह कुछ नहीं करता है क्योंकि घटनाओं के लिए कोई घटना बाध्य नहीं हुई है। अगर मुझे सही ढंग से याद आती है, तो jQuery ने ईवेंट हैंडलर्स की अपनी सूची बनाए रखी है जो प्रदर्शन और अन्य उद्देश्यों के लिए नोडलिस्ट्स के लिए बाध्य हैं।

यदि आपको एक सुविधा के लिए इस सुविधा की जरूरत है या बहुत कम कंस (आप पूरे ऐप को इस फीचर की आवश्यकता नहीं है) मैं नहीं बल्कि jQuery को छोड़ रहा हूं (नए कारणों, सीडीएन आदि के अपडेट करने में सक्षम होने सहित कई कारणों के लिए) और निम्नलिखित समाधान हैं:

 // For modren Browsers $(ele).trigger("click"); // Relaying on Paul Irish's conditional class names http://bit.ly/HWIpAp (via HTML5 Boilerplate http://bit.ly/HUzi3I) where each IE version gets a class of its Version $("html.ie7").length && (function(){ var eleOnClickattr = $(ele).attr("onclick") eval(eleOnClickattr); })() 

उसी टैब में हाइपरलिंक खोलने के लिए, इसका उपयोग करें:

 $(document).on('click', "a.classname", function() { var form = $("<form></form>"); form.attr( { id : "formid", action : $(this).attr("href"), method : "GET", }); $("body").append(form); $("#formid").submit(); $("#formid").remove(); return false; }); 

आप उस तत्व के लिए jQuery के ऑब्जेक्ट का चयन करने के लिए jQuery का उपयोग कर सकते हैं। फिर, अंतर्निहित DOM तत्व प्राप्त करें और इसके click() विधि को कॉल click()

आईडी द्वारा

 $("#my-link").each(function (index) { $(this).get(0).click() }); 

या सीएसएस वर्ग द्वारा लिंक्स के एक समूह को क्लिक करने के लिए jQuery का उपयोग करें

 $(".my-link-class").each(function (index) { $(this).get(0).click() });