2009-08-28 16 views
70

मैं एक एंकर टैग लिखना चाहता हूं जो कुछ जावास्क्रिप्ट निष्पादित करता है और फिर href इसे ले जा रहा था, जहां जाने के लिए आगे बढ़ता है। मेरे जावास्क्रिप्ट को निष्पादित करने वाले फ़ंक्शन को आमंत्रित करना और window.location या top.locationhref स्थान पर मेरे लिए काम नहीं करता है।एचटीएमएल एंकर लिंक - href और दोनों पर क्लिक करें?

तो, कल्पना करें कि मेरे पास पृष्ठ पर आईडी "फू" वाला तत्व है। (- top.location का उपयोग कर इसे पृष्ठ पुनः लोड करने का कारण होता है एक बार पुनः लोड करने का कारण नहीं)

<a href="#Foo" onclick="runMyFunction(); return false;">Do it!</a> 

जब यह क्लिक किया जाता है, मैं runMyFunction निष्पादित करने के लिए और फिर #Foo करने के लिए पृष्ठ कूद चाहते हैं: मैं एक लंगर के लिए इसी तरह लेखक को चाहते हैं।

सुझाव? मुझे jQuery का उपयोग करने में खुशी है अगर यह यहां मदद कर सकता है ...

+0

'सच वापसी; 'समाधान है, लेकिन आप' location.hash = '# Foo' भी कॉल कर सकते हैं। यह पृष्ठ को फिर से लोड नहीं करेगा। – shuangwhywhy

उत्तर

110

बस return true इसके बजाय?

onClick कोड से वापसी मूल्य क्या निर्धारित करता है लिंक निहित क्लिक किए गए कार्रवाई संसाधित किया जाता है या नहीं - लौटने false मतलब है कि यह संसाधित नहीं है, लेकिन अगर आप true लौट तो ब्राउज़र के बाद यह कार्रवाई करने के लिए आगे बढ़ना होगा अपने फ़ंक्शन रिटर्न और उचित एंकर पर जाएं।

+0

क्या होगा यदि ऑनक्लिक कुछ भी वापस नहीं करता है? – maciek

+1

@maciek तो वापसी मूल्य को 'अपरिभाषित' माना जाता है जिसे इन उद्देश्यों के लिए झूठा माना जाता है। – Amber

+1

अतीत में जब भी मैं एक नया पृष्ठ लॉन्च करने के लिए एक जेएस फ़ंक्शन का उपयोग करता हूं, और href विशेषता के लिए केवल "#" डालता हूं, तो मैं डिफ़ॉल्ट कार्रवाई को रोकने के लिए "-1" वापस कर दूंगा, जो आमतौर पर ब्राउज़र होता है पेज के शीर्ष पर कूदते हुए, या कभी-कभी मैं कुछ भी वापस नहीं करता। हाल ही में मुझे उन सभी पृष्ठों को संशोधित करना पड़ा है जैसे @ एबर ने सलाह दी है ... विशेष रूप से झूठी वापसी करने के लिए, अगर मैं पृष्ठ को कूदना नहीं चाहता हूं। – Randy

7

यदि लिंक रन सफल होने पर लिंक केवल स्थान बदलना चाहिए, तो onclick="return runMyFunction();" करें और फ़ंक्शन में आप सही या गलत वापस आ जाएंगे।

यदि आप केवल फ़ंक्शन चलाने के लिए चाहते हैं, और फिर एंकर टैग को अपना काम करने दें, तो बस return false कथन हटा दें।

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

23
<a href="#Foo" onclick="return runMyFunction();">Do it!</a> 

और

function runMyFunction() { 
    //code 
    return true; 
} 

इस तरह आप youf समारोह निष्पादित करना होगा और आप इस लिंक का पालन करेंगे और आप लिंक बिल्कुल के बाद अपने कार्य को सफलतापूर्वक था चलाने का पालन करेंगे।

+0

यदि आपका फ़ंक्शन एक स्थगित फ़ंक्शन कॉल के बाद सत्य हो जाता है तो काम नहीं लगता है? – DavidVdd

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