टैग की ऑनक्लिक विशेषता से उत्पन्न होने वाले कस्टम फ़ंक्शन से बचाव घटना को कॉल करने के लिए एक्सेस इवेंट


119

मेरे पास इस तरह के लिंक हैं:

<a href="#" onclick="myfunc({a:1, b:'hi'})" />click</a>
<a href="#" onclick="myfunc({a:3, b:'jo'})" />click</a>

और मैं preventDefault()अंदर करना चाहूंगा myfunc(), क्योंकि #लिंक पर क्लिक करने पर (बिना किए return false;या बिना href='javascript:void(0);') पता बार में जोड़ दिया जाएगा

क्या यह संभव है? क्या मुझे घटना मिल सकती हैmyfunc()


6
झूठे के साथ गलत क्या है?
एलेक्स

5
यह प्रचार भी बंद कर देता है
ओमू

4
return falseकेवल jQuery के भीतर प्रचार बंद हो जाता है।
क्रुज़्मो

जवाबों:


157

मेरा मानना ​​है कि आप eventफ़ंक्शन इनलाइन में पास हो सकते हैं जो eventW3C अनुरूप ब्राउज़रों में उठाए गए ईवेंट के लिए ऑब्जेक्ट होगा (यानी IE के पुराने संस्करणों को अभी भी देखने के लिए आपके ईवेंट हैंडलर फ़ंक्शन के अंदर का पता लगाने की आवश्यकता होगी window.event)।

एक त्वरित उदाहरण

function sayHi(e) {
   e.preventDefault();
   alert("hi");
}
<a href="http://google.co.uk" onclick="sayHi(event);">Click to say Hi</a>

  1. इसे चलाएं और ध्यान दें कि अलर्ट के बाद लिंक Google पर पुनर्निर्देशित नहीं करता है।
  2. फिर, बदलें eventonclick हैंडलर में गए को कुछ और की तरहe , रन पर क्लिक करें, फिर ध्यान दें कि अलर्ट के बाद रीडायरेक्शन होता है (परिणाम फलक सफेद हो जाता है, एक रीडायरेक्ट प्रदर्शित करता है)।

5
ठीक है, मुझे लगता है कि मुझे अपने पैरामीटर को दूसरे स्थान पर रखना हैmyfunc(event, {a:123, b:"asdas"})
ओमू

1
@Omu पारित तर्क, घटना, किसी भी स्थान पर हो सकती है, पहले वाला होना जरूरी नहीं है, जब तक कि यह फ़ंक्शन के लिए परिभाषित पैरामीटर सूची के सही स्थान पर है। उदाहरण के लिए, function myfunc(o, e) {...}तब इसे कहा जा सकता है myfunc({a:1, b:'hi'}, event)
1947 को cateyes

2
मुझे लगता है कि आपको इवेंट ऑब्जेक्ट को स्पष्ट रूप से पास और कैप्चर नहीं करना है। आप बस इसे फ़ंक्शन में संदर्भित कर सकते हैं। क्या कोई कृपया पुष्टि कर सकता है? मेरा मतलब है, इस घटना के बिना यह कोड भी काम करना चाहिए:function sayHi() { event.preventDefault(); alert("hi"); }
के विज

111

सबसे सरल उपाय है:

<a href="#" onclick="event.preventDefault(); myfunc({a:1, b:'hi'});" />click</a>

यह वास्तव में कैश के लिए दस्तावेज़ों के लिए कैशबैक करने का एक अच्छा तरीका है जिसमें कोई JS सक्षम ब्राउज़र नहीं है (यदि कोई JS नहीं है तो कोई कैश का भंडाफोड़ नहीं होता है)

<a onclick="
if(event.preventDefault) event.preventDefault(); else event.returnValue = false;
window.location = 'http://www.domain.com/docs/thingy.pdf?cachebuster=' + 
Math.round(new Date().getTime() / 1000);" 
href="http://www.domain.com/docs/thingy.pdf">

यदि जावास्क्रिप्ट सक्षम है, तो यह पीडीएफ को कैश बस्टिंग क्वेरी स्ट्रिंग के साथ खोलता है, यदि नहीं तो यह बस पीडीएफ खोलता है।


अगर कैश बस्ट आने के बाद आप लिंक को फिर से लिखने के लिए सर्वर साइड टेक का उपयोग कर सकते हैं।
मपेन

यह बेहतर होगा, लेकिन मेरे पास सर्वर साइड कोड तक पहुंच नहीं है। मुझे जो मिला है, उसके साथ काम करना।
JuLo 5'14

11

इसे इस्तेमाल करे:

<script>
    $("a").click(function(event) {
        event.preventDefault(); 
    });
</script>

इसके लिए एक <script> टैग की आवश्यकता होती है जो प्रत्येक क्लिक इवेंट के लिए कोड को अधिक जटिल बनाता है।
सोमिड

इसके लिए jQuery की भी आवश्यकता होती है, जो कि वर्तमान में हो सकता है एक शर्त नहीं होनी चाहिए।
अनियमित शेड

यहां भी असहमत हैं, एक इनलाइन फ़ंक्शन का एक साधारण पार्स अधिक प्रभावी और कम कोड है।
शैनन होकिन्स

1
@ somid3, जबकि jQuery आवश्यक नहीं है , यदि आप प्रदर्शन के बारे में चिंतित हैं, तो आप एकल प्रतिनिधि ईवेंट हैंडलर का उपयोग कर सकते हैं, ताकि आप इस तरह पेज पर सभी एंकरों के लिए केवल एक श्रोता संलग्न कर रहे हैं $("body").on("click","a",function(e) { e.preventDefault() });:। या तो मामले में, न तो समाधान प्रदर्शन को सार्थक रूप से प्रभावित करने वाला है।
काइलमिट

7
<script type="text/javascript">
$('a').click(function(){
   return false;
});
<script>

2
यह हर एंकर पर लागू होता है, और सभी लिंक को तोड़ देगा, पेज पर डालने के लिए जावास्क्रिप्ट के साथ-साथ jQuery की भी आवश्यकता होती है।
शैनन होकिन्स

साथ ही, jQuery का उपयोग करते समय, return falseइसकी अनुशंसा नहीं की जाती है क्योंकि यह उस तत्व के अन्य सभी ईवेंट हैंडलर को चलने से भी रोकेगा, और ईवेंट को बुबलिंग से उच्चतर तत्वों तक रोक देगा।
Stijn de Witt

6

लिंक के लिए एक अद्वितीय वर्ग और एक जावास्क्रिप्ट जोड़ें जो इस वर्ग के साथ लिंक पर डिफ़ॉल्ट को रोकता है:

<a href="#" class="prevent-default" 
   onclick="$('.comment .hidden').toggle();">Show comments</a>

<script>
  $(document).ready(function(){

    $("a.prevent-default").click(function(event) {
         event.preventDefault(); 
          });
  });
</script>

एक वैश्विक समाधान के लिए दिलचस्प दृष्टिकोण।
AFract

5

क्या आप केवल एक टैग से href विशेषता नहीं निकाल सकते हैं?


1
हां, यह एक विकल्प भी है, हालांकि डिफ़ॉल्ट रूप से लिंक को रेखांकित नहीं किया जाएगा, और अगर जावास्क्रिप्ट को बंद कर दिया जाता है तो जाने के लिए href नहीं होगा
Omu

4

मुझे लगता है कि जब हम onClick का उपयोग करते हैं तो हम डिफ़ॉल्ट से कुछ अलग करना चाहते हैं। इसलिए, onClick के साथ अपने सभी लिंक के लिए:

$("a[onClick]").on("click", function(e) {
  return e.preventDefault();
});


2

आप इस तरह से घटना पर पहुँच सकते हैं:

<button onclick="yourFunc(event);">go</button>

और आपके जावास्क्रिप्ट फंक्शन पर, मेरी सलाह उस पहली लाइन स्टेटमेंट को इस प्रकार जोड़ रही है:

function yourFunc(e) {
    e = e ? e : event;
}

तब ईवेंट चर के रूप में हर जगह ई का उपयोग करें


0

e.preventDefault (); से https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault

या अपनी विधि से झूठे लौटे हैं।


1
पहले से उपलब्ध कराए गए उत्तरों के लिए आपका उत्तर कैसे भिन्न है?
दिमित्र स्पैसोवस्की

मुझे पूछे गए प्रश्न पर अधिक स्पष्टता के लिए एक URL दिया गया था
राहुल सिंह चौहान

0

बिना किसी JS लाइब्रेरी या jQuery के। यदि संभव हो तो एक अच्छा पॉपअप विंडो खोलने के लिए। सुरक्षित रूप से सामान्य लिंक खुले में विफल रहता है।

<a href="https://acme.com/" onclick="onclick="openNewWindow(event, this.href);">...</a>

और सहायक समारोह:

function openNewWindow(event, location) {
  if (event.preventDefault && event.stopImmediatePropagation) { 
    event.preventDefault(); 
    event.stopImmediatePropagation(); 
  } else {
    event.returnValue = false; 
  }
  window.open(location, 'targetWindow', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=800,height=450');
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.