jquery

2011-03-05 15 views
16

का उपयोग कर एंकर टैग के डिफ़ॉल्ट व्यवहार को ओवरराइड करना मैं एक एंकर टैग के डिफ़ॉल्ट व्यवहार को ओवरराइड करने का प्रयास कर रहा हूं, इसलिए मैं अपने सर्वर पर किसी नए टैब या विंडो के बजाय एक्सिसिटिंग div में एक वेब पेज में लोड कर सकता हूं।jquery

अब तक मेरे पास है:

myContainer.click(function(){     
        event.preventDefault(); 
        $('a').click(function(){ 
         var link = $(this).attr('href'); 
         myContainer.load(link); 
        }); 
      }); 

क्रोम में मैं लिंक पर क्लिक करने से पहले दो बार यह एक एफएफ यह सब पर काम नहीं करता IE में कुछ भी करता है, और नई लिंक के साथ पेज ताज़ा करता है।

किसी भी मदद की बहुत सराहना की जाती है।

myContainer.click(function(event){ 
event.preventDefault(); 
$('a').click(function(){ var link = $(this).attr('href'); 
myContainer.load(link); 
}); 
}); 

कोशिश उन्हें पुन: व्यवस्थित करने के लिए::

myContainer.ready(function(){ 
    $('a').click(function(event){ 
    event.preventDefault(); 
    var link = $(this).attr('href'); 
    myContainer.load(link); 
    }); 
    }); 

उत्तर

22

यह हो नहीं करना चाहिए बस:

$('a').click(function(e) { 
    e.preventDefault(); 
    myContainer.load(this.href); 
}); 

आपका कोड एक क्लिक हैंडलर प्रदान करती है

+0

आप पूर्ण सुंदरता! पूरी तरह से आदमी काम करता है! बीटीडब्ल्यू लाइव और प्रतिनिधि के बीच क्या अंतर है? – Julio

+2

@ जुलिएओ: 'लाइव' दस्तावेज़ रूट में एक इवेंट हैंडलर जोड़ता है (इसलिए घटना को पूरे डोम पेड़ को बुलबुला करना पड़ता है) जबकि 'प्रतिनिधि' ईवेंट हैंडलर को एक निश्चित तत्व ('इस मामले में मेरा कंटेनर') में जोड़ता है। तो इस 'प्रतिनिधि' उदाहरण में, केवल * 'myContainer' के अंदर लिंक * पर ईवेंट पर क्लिक करें, जबकि साथ ही, प्रत्येक लिंक पर एक क्लिक संभाला जाएगा (हालांकि आप' $ ('# myContainer a' भी लिख सकते हैं)। लाइव() 'लेकिन जैसा कि मैंने कहा, 'प्रतिनिधि' के साथ, ईवेंट हैंडलर मूल तत्वों के करीब एक तत्व से बंधे जा सकते हैं। आपको 'लाइव' पर 'प्रतिनिधि' पसंद करना चाहिए। –

+0

धन्यवाद आदमी! बहुत बढ़िया जानकारी। घटना गायब - स्कूलबॉय त्रुटि! मैं ब्राउज़र ऐप में एक विशिष्ट के लिए एक कस्टम टैब प्लगइन लिखने की प्रक्रिया में हूं, इसलिए यह वास्तव में उपयोगी जानकारी है। मूल रूप से नए टैब में कुछ लिंक खोलें या टैब को छोड़ दें, टैब प्रबंधित करें, ब्राउज़र इतिहास इत्यादि - इस समस्या के दायरे में कोई सुझाव सलाह? – Julio

3

आप घटना में पारित करने के लिए भूल गया एक क्लिक हैंडलर के अंदर। तो पहले क्लिक क्लिक हैंडलर को लिंक पर संलग्न करेगा, और दूसरा क्लिक करें (लिंक पर) नए क्लिक हैंडलर को निष्पादित करेगा।

ऐसा लगता है कि आपको केवल एक हैंडलर क्लिक करें। जबाब, अपने IE और एफएफ के लिए समस्या का समाधान होने

myContainer.on('click', 'a', function(e) { 
    e.preventDefault(); 
    myContainer.load(this.href); 
}); 

// or 

$(document).on('click', 'a', function(e) { 
    e.preventDefault(); 
    myContainer.load(this.href); 
}); 
+0

हे, धन्यवाद, लेकिन अभी भी लिंक पर क्लिक करने से पहले दो बार कुछ भी होता है: लिंक गतिशील रूप से जोड़ रहे हैं, तो आप .on() (.live के उत्तराधिकारी और .delegate) का उपयोग कर सकते – Julio