2012-09-19 13 views
5

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

<div class="selectNode" id="selectNode_1" style="color: rgb(229, 229, 229); background-color: rgb(47, 47, 47); "> 
    <a href="http://www.google.com" class="selectAnchor" style="color: rgb(229, 229, 229); "> 
    Google 
    </a> 
    <img class="childImage" src="icon.png"> 
</div> 

और jQuery में, मेरे पास है:

$(".selectAnchor, .menuAnchor").click(function(event){ 
    event.stopPropagation(); 
    console.log(event.target.nodeName); 
    //event.preventDefault(); 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localsite/menuRedirect.php', 
     data: {id:0, module:'Module',source:'Source'}, 
     complete: function(data){ 
     console.log("DONE"); 
     return true; 
     } 
    }); 
}); 

लिंक पर रीडायरेक्ट चयनित पृष्ठ, लेकिन AJAX कोड कभी समाप्त नहीं होता है, इस प्रकार उपयोगकर्ता के क्लिक को कभी पंजीकृत नहीं करता है।

मैंने event.preventDefault का उपयोग करने का प्रयास किया, लेकिन रद्द किए गए ईवेंट को फिर से शुरू करने का कोई तरीका नहीं है। समस्या का

भाग अतिरिक्त कार्यक्षमता से आता है, कहते हैं, अधिकांश उपयोगकर्ताओं को सही एंकर टैग पर एक नए टैब में खोलने (या नियंत्रण + क्लिक करें, या मध्य क्लिक), और कुछ का उपयोग कर

<a href="javascript:saveClick(o)">Google</a> 
तरह के लिए क्लिक करें साइट पर (सुरक्षा कारणों से)

की अनुमति नहीं है।

कोई सुझाव यह कैसे किया जा सकता है?

उत्तर

13

उपयोग event.preventDefault, तो सफलता पर, location.href = self.href

$(".selectAnchor, .menuAnchor").click(function(event){ 
    event.preventDefault(); 
    console.log(event.target.nodeName); 
    var self = this; 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localsite/menuRedirect.php', 
     data: {id:0, module:'Module',source:'Source'}, 
     complete: function(data){ 
     console.log("DONE"); 
     location.href = self.href; 
     } 
    }); 
}); 

का उपयोग करें या दूर करने के लिए संदर्भ संपत्ति का इस्तेमाल करते हैं var self = this

$(".selectAnchor, .menuAnchor").click(function(event){ 
    event.preventDefault(); 
    console.log(event.target.nodeName); 

    $.ajax({ 
     type: 'POST', 
     context: this, 
     url: 'http://localsite/menuRedirect.php', 
     data: {id:0, module:'Module',source:'Source'}, 
     complete: function(data){ 
     console.log("DONE"); 
     location.href = this.href; 
     } 
    }); 
}); 
+0

पर माउस पर लिंक नहीं दिखाई देगा, मैंने कुछ ऐसा करने की कोशिश की, और बायाँ क्लिक के मामले में काम करता है, लेकिन नियंत्रण + बायाँ क्लिक, या मध्य क्लिक एक ही विंडो पर लिंक खोलता है। कुछ लिंक में लक्ष्य = "_ खाली" भी शामिल है, इसलिए यह विधि उन पर भी काम नहीं करेगी। – desto

+0

यदि आप उस कार्यक्षमता को संरक्षित करना चाहते हैं, तो आप ऐसा नहीं कर सकते हैं। यदि आप ईवेंट को होने से नहीं रोकते हैं, तो आपका AJAX अनुरोध पूरा नहीं होगा। यदि आप ईवेंट को रोकते हैं, तो अन्य कार्यक्षमता को संरक्षित नहीं किया जा सकता है। –

+0

क्या आपने एक इंटरमीडिएट पेज बनाने पर विचार किया है जो बाहर निकलने के बाद रीडायरेक्ट करता है? –

0

jQuery में यह फिर प्रयास करें यह

<div class="selectNode" id="selectNode_1" style="color: rgb(229, 229, 229); background-color: rgb(47, 47, 47); "> 
    <a href="#" class="selectAnchor" style="color: rgb(229, 229, 229); "> 
    Google 
    </a> 
    <img class="childImage" src="icon.png"> 
</div> 

:

$(".selectAnchor, .menuAnchor").click(function(event){ 
    event.preventDefault(); 
    console.log(event.target.nodeName); 
    //event.preventDefault(); 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localsite/menuRedirect.php', 
     data: {id:0, module:'Module',source:'Source'}, 
     complete: function(data){ 
     console.log("DONE"); 
     window.location = "http://www.google.com" 
     } 
    }); 
}); 
+0

मैंने कुछ ऐसा करने की कोशिश की, और बाएं क्लिक के मामले में काम करता है, लेकिन नियंत्रण + बायाँ क्लिक, या मध्य क्लिक उसी विंडो पर लिंक खोलता है। कुछ लिंक में लक्ष्य = "_ खाली" भी शामिल है, इसलिए यह विधि उन पर भी काम नहीं करेगी। – desto

+0

@desto - संपादित, यह निश्चित रूप से काम करेगा, केवल एक चीज यह है कि आपको –

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