2011-11-28 9 views
6

अब काफी समान दिखने वाले सवालों की एक बहुत कुछ यहाँ है, लेकिन मैं सोच रहा था, मुझे क्या करना चाहिए, अगर मैं न सिर्फ विंडो के location बदलना चाहते हैं, लेकिन ट्रिगर जो कुछ कार्यों click घटना के लिए बाध्य किया जा सकता है, और केवल href को बदलें यदि वे इसके साथ ठीक हैं, या सिर्फ श्रोताओं के हैं, तो रीडायरेक्ट करें।मैं JQuery में किसी लिंक पर क्लिक करने वाले उपयोगकर्ता को अनुकरण कैसे करूं?

उदाहरण के लिए:

var a = $('.edithost'); 
a.click(function() {return false;}); 

मैं माउस के साथ लिंक पर क्लिक करें, तो यह कभी नहीं मुझे href करने के लिए ले जाता है, तो बस attr('href') करने के लिए उपयोगकर्ता पुनः निर्देशित पेज के अभिप्रेत व्यवहार बदल जाएगा। इसके अलावा, क्लिक न केवल लिंक पर लागू होता है, बल्कि कहने के लिए, बटन भी, मुझे इस मामले में फॉर्म जमा करना होगा, आदि

तो मैं सोच रहा था कि क्या तत्व को क्लिक करना अनुकरण करना संभव है, इसलिए ब्राउज़र के सभी व्यवहार बिल्कुल वही हैं, जैसे कि माउस के साथ क्लिक किया गया है?

कोई श्रोताओं के लिए एक कड़ी के लिए बाध्य हो सकते हैं।

उदाहरण:

var a = $('<a href="google.com">google</a>'); 
a.click(); 
a.trigger('click'); 

यह गूगल के लिए ले नहीं होगा, मैं यह कर बनाना चाहते हैं।

अद्यतन: .click() काम नहीं करेगा। trigger('click') भी।

$('#YourSelector').click(); 

इस उपयोगकर्ता ने क्लिक की बराबरी करेंगे: preventDefault इस

+0

http://stackoverflow.com/questions/809038/how-can- i-मैन्युअल रूप से आग एक-घटना-कि-ए-तार-अप का उपयोग-jQuery जब आप .click() तो .PreventDefault का उपयोग() –

+0

आप लाइव() jQuery समारोह की कोशिश की? http://api.jquery.com/live/ – wasimbhalli

उत्तर

13

आईई में, आप तत्व पर .click() पर कॉल कर सकते हैं, लेकिन मानक ब्राउज़र के लिए आपको मूल माउस ईवेंट बनाकर क्लिक ईवेंट अनुकरण करने की आवश्यकता है और फिर इसे ट्रिगर करने के लिए dispatchEvent का उपयोग करें।

मैं यह सब इस jQuery 'प्लगइन' में अभिव्यक्त किया:

$.fn.simulateClick = function() { 
    return this.each(function() { 
     if('createEvent' in document) { 
      var doc = this.ownerDocument, 
       evt = doc.createEvent('MouseEvents'); 
      evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); 
      this.dispatchEvent(evt); 
     } else { 
      this.click(); // IE 
     } 
    }); 
} 

अब, बस फोन:

$('.edithost').simulateClick(); 
+0

पूरी तरह से काम करता है, एक टन धन्यवाद! मेरे द्वारा – Fluffy

+0

+1। मैं अपना जवाब हटा रहा हूं, क्योंकि यह मूल रूप से वही बात है। – Tomalak

+1

मैं इसे (मुझे आशा है) यह करने के लिए सुधार हुआ है: '\t $ .fn.simulateClick = function() { \t \t अगर (दस्तावेज़ में 'createEvent') { \t \t \t वर डॉक = दस्तावेज़; \t \t \t वर evt = doc.createEvent ('MouseEvents'); \t \t \t evt.initMouseEvent ('क्लिक', सच सच, doc.defaultView, 1, 0, 0, 0, 0,, ​​झूठी झूठी, झूठे, झूठे, 0, नल); \t \t \t वापसी this.each (function() { \t \t \t \t this.dispatchEvent (evt); \t \t \t}); \t \t} \t बाकी \t \t \t \t वापसी this.each (function() { \t \t \t \t this.click(); // आईई \t \t \t}); \t}; ' – user2173353

0

हाँ, बहुत सरल के साथ कोई संबंध नहीं है।

+1

यह श्रोताओं को ईवेंट (यदि कोई हो) पर क्लिक करने के लिए बाध्य करेगा - यह उपयोगकर्ता को रीडायरेक्ट नहीं करेगा, जब तक कि श्रोताओं में से कोई एक नहीं करता - और यह माउस क्लिक से अलग है – Fluffy

+0

हाँ, आप सही हैं :)। दिए गए स्पष्टीकरण से मैं इस धारणा से चला गया कि उनके कार्यों में उन श्रोताओं थे। – Nealv

-1

मुझे वास्तव में वह नहीं मिलता है जो आप करना चाहते हैं। इस के साथ :

a.click(function(e){ 
e.preventDefault(); 
}); 

आप घटना के डिफ़ॉल्ट व्यवहार को बंद कर सकते हैं (इस मामले में, a.attr करने के लिए ('href') पुनः निर्देशित)। फिर आप जो भी कार्य चाहते हैं उसे निष्पादित कर सकते हैं और फिर उपयोगकर्ता को मैन्युअल रूप से रीडायरेक्ट कर सकते हैं।

यह आपके लिए क्या देख रहे हैं?

आप क्लिक करें घटना को गति प्रदान करना चाहते हैं, बस

a.click(); 
+0

'क्लिक' मूल क्लिक ईवेंट ट्रिगर नहीं करेगा। – Fluffy

2

प्रयास करें a[0].click();

यह बजाय DOM तत्व का click विधि निष्पादित करेंगे ईवेंट सक्रिय करने की है।

+0

फ़ायरफ़ॉक्स में बहुत अच्छा काम करता है, क्या आपको पता है कि यह अन्य ब्राउज़रों में उचित रूप से समर्थित है या नहीं? – Fluffy

+0

यह वेबकिट में काम नहीं करता है, आपको मैन्युअल रूप से ईवेंट बनाने की आवश्यकता है। – David

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