2015-01-09 13 views
15

काम नहीं कर रहा है मैं एक वेब अनुप्रयोग बना रहा हूं जो प्रीसेट निर्देशिका में स्क्रिप्ट को छोड़कर विस्तार योग्य है। किसी पृष्ठ पर जाने से पहले स्क्रिप्ट को फ़ाइल हेडर पढ़ने की आवश्यकता होती है, इसलिए जब मुझे लिंक क्लिक किया जाता है और पहले कुछ जेस्क्रिप्ट चलाते हैं तो मुझे .preventDefault() का उपयोग करने की आवश्यकता होती है।jquery .click() event.preventDefault()

$('.filelink').click(function(e) { 
     e.preventDefault(); 
     //do some other stuff here 
    }); 

:

<a href="path/to/file.php" class="filelink">Some Text</a> 

यहाँ jQuery मैं डिफ़ॉल्ट कार्रवाई को रोकने के लिए उपयोग करने के लिए कोशिश कर रहा हूँ है: दुर्भाग्य से मैं .preventDefault()

यहाँ मेरी कड़ी प्रारूप है अतीत नहीं मिल सकता है संपादित करें:

अधिक जानकारी:

<script>...</script> में है मेरी पाद लेख। यह फ़ंक्शन $(document).ready$.ajax कॉल के बाद है जो लिंक की सूची बनाता है यह फ़ंक्शन क्लिक के लिए सुनने की कोशिश कर रहा है।

$(function(){ 

//your code here 

}); 

:

+1

आप अपने jquery कथन में 'बंद' खो रहे हैं। सिंटैक्स त्रुटि के कारण क्लिक ईवेंट कभी नहीं निकाल दिया जाता है। – r3wt

+0

लॉल, वास्तव में वहां टिप्पणी करते समय इसे संपादित किया गया था। मैंने इसे यहां दर्ज करने पर गलत टाइप किया है। यह अब ठीक है जैसा कि यह मेरी लिपि में करता है, लेकिन फायरिंग नहीं है। – KingRichard

+0

मैंने संपादन को वापस ले लिया क्योंकि यह अभी तक स्पष्ट नहीं था कि टाइपो सिर्फ प्रश्न में था या संपादन के समय वास्तविक कोड में था। जैसा कि लिखा गया है, निश्चित टाइपो के साथ, मुझे आपके द्वारा वर्णित समस्या का कोई कारण नहीं दिखता है। –

उत्तर

45

अपने लिंक के बाद से पेज को गतिशील रूप से जोड़ दिए जाते हैं, तो आप document.on() उपयोग करने के लिए क्लिक पर कब्जा करने की जरूरत है आयोजन।

के रूप में इस प्रकार है

$(document).on(event, selector, callback);

तो अपने क्लिक हैंडलर बन जाएगा गतिशील सामग्री ऐसे ईवेंट श्रोता जोड़कर के लिए वाक्य रचना है:

$(document).on('click','.filelink',function(e){ 

e.preventDefault(); 

//code here 

return false; 

}); 
+0

इसके लिए धन्यवाद। मुझे गतिशील रूप से संलग्न तत्वों के बारे में यह नहीं पता था। क्या आप जानते हैं कि यह क्यों है? – KingRichard

+2

क्योंकि जब आप क्लिकहेडलर बनाते हैं, यानी उस समय लोड होने पर तत्व मौजूद नहीं होता है। jQuery चयनकर्ता सूची में नए तत्वों के लिए नहीं सुनता है, यह बहुत ही अपर्याप्त होगा और गतिशील सामग्री वाले पृष्ठों पर क्रैश होगा। – r3wt

+1

'वापसी झूठी' वास्तव में आवश्यक नहीं है। preventDefault() पर्याप्त होना चाहिए। – amenthes

1

अपने कोड से घिरा हुआ है? या

$(document).ready(function(){ 

//your code here 

}); 

? , क्योंकि आपको अपने क्लिक श्रोता को जोड़ने से पहले <a></a> तत्व तैयार होने तक प्रतीक्षा करनी चाहिए। ऊपर दिए गए कोड को आज़माएं या </body> टैग से पहले या <a></a> तत्व के ठीक बाद एचटीएमएल के निचले हिस्से में अपना कोड रखें। कि काम करना चाहिए

संपादित करें: आपके लिंक गतिशील रूप से जुड़ जाते हैं के बाद से अपने $('.filelink').click() समारोह सही होने के बाद वे

+0

आपको ईवेंट श्रोताओं को जोड़ने से पहले डोम तैयार होने तक प्रतीक्षा करने की ज़रूरत नहीं है, आपको बस आवश्यकता है यह सुनिश्चित करने के लिए कि तत्व मौजूद होने के बाद कोड निष्पादित हो। –

+0

@ केविनबी वास्तव में आप सही हैं !, धन्यवाद –

1

जोड़ रहे हैं फोन मुझे लगता है कि तुम्हें याद किया $ (document) .ready()

कृपया अद्यतन अपने निम्नलिखित के रूप में कोड:

$(document).ready(function(){ 
    $('.filelink').click(function(e) { 
     e.preventDefault(); 
     //do some other stuff here 
    }); 

}) 
0

मैं एक ही समस्या थी, क्योंकि मैं खिड़की बदल मेरे ईवेंट हैंडलर में .location.search:

$('.filelink').click(function(e) { 
     e.preventDefault(); 
     window.location.search = "something"; 
}); 

मेरी समस्या को ठीक करने के लिए मैंने window.location.hash का उपयोग किया (जो वैसे भी मैं वांछित था)।

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