2009-08-10 17 views
34

मैं जेएस के लिए काफी नया हूं - इसलिए बस यह सोचकर कि आप इस समस्या को हल करने के बारे में जानते हैं या नहीं।Href = "#" स्क्रॉल न करें

वर्तमान मैं अपने कोड

<a href='#' class="closeLink">close</a> 

में है कौन सा कुछ जे एस एक बॉक्स को बंद करने से चलाता है। मेरी समस्या यह है कि जब उपयोगकर्ता लिंक पर क्लिक करता है - href = "#" यह होता है जब उपयोगकर्ता पृष्ठ के शीर्ष पर ले जाता है।

इसे कैसे हल करें, तो यह ऐसा नहीं करता है? यानी मैं कभी-कभी ऑनक्लिक = "वापसी झूठी" की तरह उपयोग नहीं कर सकता क्योंकि मुझे लगता है कि जेएस काम करने से रोक देगा?

धन्यवाद

उत्तर

49

यह करने के लिए हमेशा की तरह अपने जावास्क्रिप्ट क्लिक हैंडलर से झूठी वापस जाने के लिए है। यह दोनों घटनाओं को बुलबुले से रोकने और घटना की सामान्य कार्रवाई को रद्द करने से रोक देगा। यह मेरा अनुभव रहा है कि यह आमतौर पर वह व्यवहार है जिसे आप चाहते हैं।

jQuery उदाहरण:

$('.closeLink').click(function() { 
     ...do the close action... 
     return false; 
}); 

आप, बजाय, बस preventDefault उपयोग कर सकते हैं तो आप बस सामान्य कार्रवाई को रोकने के लिए चाहते हैं।

$('.closeLink').click(function(e) { 
    e.preventDefault(); 
    ... do the close action... 
}); 
+2

+1 - ध्यान दें कि आप jQuery का उपयोग नहीं कर रहे हैं, और अगर window.event मौजूद है की जाँच करने के लिए सुनिश्चित करें यदि हां, तो झूठे लौटने से पहले सेट window.event.returnValue = false - आईई जब तक आप ऐसा नहीं करते तब तक हमेशा बुलबुले नहीं रोकते हैं। –

+0

बहुत अच्छा धन्यवाद - सीखने के रूप में मैं जाओ! :) –

+1

-1। हालांकि यह काम करता है, 'event.preventDefault' फ़ंक्शन के BEGINNING पर * यह करने का सही तरीका है। –

0

अपने कोड eventObject आप preventDefault() इस्तेमाल कर सकते हैं पारित कर दिया हो रही है, तो; झूठी वापसी भी मदद करता है।

mylink.onclick = function(e){ 
e.preventDefault(); 
// stuff 
return false; 
} 
1

वापसी झूठी जवाब है, लेकिन मैं आम तौर पर इस के बजाय कार्य करें: ऐसा होने से

$('.closeLink').click(function(event) { 
     event.preventDefault(); 
     ...do the close action... 
}); 

बंद हो जाता है कार्रवाई से पहले आप अपने कोड चलाते हैं।

+0

'वापसी झूठी' काम करता है, लेकिन यह सभी मामलों में जवाब नहीं है। 'वापसी झूठी' दोनों 'event.preventDefault' और 'event.stopPropagation' दोनों को कॉल करता है। 'स्टॉपप्रोगेशन' ऑब्जेक्ट से जुड़ी किसी अन्य घटना को फायरिंग से रोक देगा। जो आप चाहते हैं या नहीं कर सकते हैं। '12 "के लिए –

1

हालांकि यह बहुत लोकप्रिय प्रतीत होता है, href = '#' जावास्क्रिप्ट के लिए एक जादू शब्द नहीं है, यह एक खाली एंकर के लिए एक नियमित लिंक है और इस तरह यह सुंदर व्यर्थ है। आप मूल रूप से दो विकल्प हैं:

  1. जावास्क्रिप्ट अनजान उपयोगकर्ता एजेंटों के लिए एक वैकल्पिक लागू करें, यह को इंगित और जावास्क्रिप्ट के साथ लिंक को रद्द करने के href पैरामीटर का उपयोग करें। उदाहरण के लिए:

    <span onclick="close(); return false">Close</span>

+0

+1 विशेष अर्थ के बिना बस एक खाली एंकर है ... धन्यवाद। –

-2

लपेटें एक div बयान:

<a href="close.php" onclick="close(); return false">

  • जब नोस्क्रिप्ट विकल्प उपलब्ध है या प्रासंगिक नहीं है, तो आप सब पर एक लिंक की जरूरत नहीं है एक लिंक के आसपास, लिंक झूठी वापसी है, क्लिक पर div को जावास्क्रिप्ट कार्यक्षमता जोड़ें ...

    <div onClick="javascript:close();"> 
        <a href="#" onclick="javascript:return false;">Close</a> 
    </div> 
    
  • 4

    जावास्क्रिप्ट संस्करण:

    myButton.onclick=function(e){ 
        e.preventDefault(); 
        // code 
        return false; 
    } 
    

    jQuery संस्करण:

    $('.myButtonClass').click(function(e){ 
        e.preventDefault(); 
        // code 
        return false; 
    }); 
    

    यह सिर्फ काम अच्छी तरह से करते हैं! :)

    20

    इस समस्या को हल करने के लिए सबसे आसान तरीका है सिर्फ इस तरह पाउंड प्रतीक के बाद एक और चरित्र को जोड़ने के लिए है:

    <a href='#a' class="closeLink">close</a> 
    

    समस्या को हल किया। हाँ, यह इतना आसान था। कुछ इस जवाब से नफरत कर सकते हैं, लेकिन वे इनकार नहीं कर सकते कि यह काम करता है।

    बस सुनिश्चित करें कि आपके पास वास्तव में "ए" को निर्दिष्ट कोई अनुभाग नहीं है या यह पृष्ठ के उस भाग पर जाएगा। (हालांकि मैं इसे जितनी बार उपयोग करता हूं, उतनी बार नहीं देखता) हालांकि, "#" डिफ़ॉल्ट रूप से, पृष्ठ के शीर्ष पर जाता है।

    +2

    हैक की तरह लगता है, लेकिन वास्तव में एक आसान फिक्स है। – jobbert

    0

    देर से उत्तर के लिए खेद है, लेकिन किसी ने इसका उल्लेख नहीं किया है। इसे <a>Do Stuff</a> बिना किसी href के बिना बनाएं और तत्व को cursor: pointer पर जोड़ें। तो फिर तुम इस प्रकार

    $(document).ready(function(){ 
     
        $("#Element").click(function(){ 
     
        alert("Hello"); 
     
        //Do Stuff 
     
        }) 
     
    });
    #Element { 
     
        cursor: pointer; 
     
    } 
     
    #Element:hover { 
     
        color: #00f; 
     
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
     
    
     
    <a id="Element">Do Stuff</a>

    0

    एक विकल्प आप के लिए उपलब्ध href = "#" उपयोग करने के लिए नहीं है, लेकिन इसके बजाय href = "javascript:;" यह आप जबकि onclick हैंडलर को चलाने के लिए अनुमति देगा jQuery के साथ किसी भी क्लिक करें घटना प्रबंधन कर सकते हैं स्क्रॉल नहीं

    उदाहरण

    लिए
    <a href="javascript:;" onclick="doSomething()">Do Something</a> 
    
    संबंधित मुद्दे