हाइपरलिंक क्लिक पर जावास्क्रिप्ट फ़ंक्शन को कॉल करें


88

मैं गतिशील रूप से ASP.NET फ़ाइल के पीछे c # कोड में हाइपरलिंक बना रहा हूं। मुझे क्लाइंट क्लिक पर जावास्क्रिप्ट फ़ंक्शन को कॉल करने की आवश्यकता है। मैं इसे कैसे पूर्ण करूं?


जवाबों:


133

Neater अभी भी, के बजाय typical href="#"या href="javascript:void"या href="whatever", मैं इस बहुत कुछ समझ में आता है लगता है:

var el = document.getElementById('foo');
el.onclick = showFoo;


function showFoo() {
  alert('I am foo!');
  return false;
}

<a href="no-javascript.html" title="Get some foo!" id="foo">Show me some foo</a>

यदि जावास्क्रिप्ट विफल हो जाता है, तो कुछ प्रतिक्रिया है। इसके अलावा, अनियमित व्यवहार (के मामले में पेज कूद href="#", के मामले में एक ही पृष्ठ पर जाकर href="") का सफाया कर दिया गया है।


13
+1 यह वर्तमान में केवल विनीत उत्तर है। +100 अगर मैं कर सका।
जेम्स

@Lewis, हां, आदर्श रूप से <a> टैग शुद्ध जेएस कॉल के लिए उपयोग नहीं किए जाएंगे, लेकिन दुर्भाग्य से पुराने ब्राउज़रों ने समर्थन नहीं किया: गैर-लिंक तत्वों के लिए होवर करें। इसलिए js घटनाओं को ट्रिगर करने के लिए अक्सर लिंक का उपयोग किया जाता था।
क्रिस वान ओपल

@ क्रिस - मुझे यकीन नहीं है कि तुम मेरी बात कर लो क्रिस। मेरा सुझाव है कि आप <a href="#"> कुछ न करें </a> का उपयोग न करें और इसके बजाय <a href="a/link/somwhere.html"> कुछ करें </a> का उपयोग करें और फिर उपयोग करें Href को ओवरराइड करने के लिए प्रगतिशील वृद्धि। यह सबसे साफ उपाय है। एंकर ठीक हैं, लेकिन उन्हें जावास्क्रिप्ट करना चाहिए अगर जावास्क्रिप्ट को अक्षम किया गया है - या किसी कारण से (IE6 के अनुसार) कुछ जावास्क्रिप्ट को हैंडलर बनाने और सौंपा जाने से पहले तोड़ दिया गया। इस तरह से आपके सभी उपयोगकर्ता खुश हैं।
लुईस

2
मेरे लिए काम नहीं कर रहा, बस पेज लोड पर स्वचालित रूप से ऑनक्लिक फ़ंक्शन निष्पादित करता है। यह भी एक दुःस्वप्न की तरह लगता है जहां पहुंच की चिंता है।
शॉन सोलोमन

4
यह काम नहीं करता है, यह सिर्फ आपको href यूआरएल पर निर्देशित करता है।
पैडक्टेक

58

सभी का सबसे सरल उत्तर है ...

<a href="javascript:alert('You clicked!')">My link</a>

या जावास्क्रिप्ट फ़ंक्शन को कॉल करने के प्रश्न का उत्तर देने के लिए:

<script type="text/javascript">
function myFunction(myMessage) {
    alert(myMessage);
}
</script>

<a href="javascript:myFunction('You clicked!')">My link</a>


2
StackOverflow 'रन कोड स्निपेट' में लिंक फ़ायरफ़ॉक्स में काम नहीं करता है (कोई अलर्ट नहीं बनाया गया है), लेकिन यह एफएफ में काम करता है जब मैं इस तरह के लिंक को एक सामान्य वेबपेज पर डालता हूं।
the_pwner224

हां यह अजीब है, यह मेरे लिए काम कर रहा था, अब ऐसा नहीं है। अन्य समान मुद्दे थे और फ़ायरफ़ॉक्स को पूरी तरह से पुनर्स्थापित करने से अलग, कोई भी निश्चित समाधान नहीं है।
जेडन लॉसन

26

Onclick पैरामीटर के साथ ...

<a href='http://www.google.com' onclick='myJavaScriptFunction();'>mylink</a>

भ्रामक कथन। यह google.com जा रहा है या जावास्क्रिप्ट फ़ंक्शन को कॉल कर रहा है? किसकी प्राथमिकता है?
नगुइ अल

12

JQuery का जवाब। चूंकि जावास्क्रिप्ट का आविष्कार JQuery के विकास के लिए किया गया था, इसलिए मैं आपको JQuery में एक उदाहरण दे रहा हूं:

<div class="menu">
    <a href="http://example.org">Example</a>
    <a href="http://foobar.com">Foobar.com</a>
</div>

<script>
jQuery( 'div.menu a' )
    .click(function() {
        do_the_click( this.href );
        return false;
    });

// play the funky music white boy
function do_the_click( url )
{
    alert( url );
}
</script>

53
जावास्क्रिप्ट का आविष्कार jQuery विकसित करने के लिए किया गया था? यह एक नया है!
पाल्स्विम

35
यह पढ़ने की तरह था कि लेगो का आविष्कार लेगो बैटमैन के निर्माण के लिए किया गया था।
शॉन सोलोमन

5
@ शॉसनसोलोमन मैं खुश हूं कि हम सहमत हैं :)
एल्कसो

1
@elcuco, महान व्यंग्य! + 'd :) लॉन्ग लाइव JQuery
Zuul

6

मैं जावास्क्रिप्ट हाइपरलिंक के लिए href के बजाय ऑनक्लिक विधि का उपयोग करना पसंद करता हूं। और आपके पास क्या मूल्य है यह निर्धारित करने के लिए हमेशा अलर्ट का उपयोग करें।

<a href='#' onclick='jsFunction();alert('it works!');'>Link</a>

यह भी इनपुट टैग उदाहरण पर इस्तेमाल किया जा सकता है।

<input type='button' value='Submit' onclick='jsFunction();alert('it works!');'>


3

आदर्श रूप से मैं आपके पीछे कोड में लिंक उत्पन्न करने से पूरी तरह से बचना चाहूंगा क्योंकि आपके कोड को हर बार उन लिंक के 'मार्कअप' में बदलाव करना चाहते हैं। यदि आपको यह करना है तो मैं आपके HTML के अंदर आपकी जावास्क्रिप्ट 'कॉल' को एम्बेड नहीं करूँगा, यह पूरी तरह से एक बुरा अभ्यास है, आपके मार्कअप को आपके दस्तावेज़ का वर्णन करना चाहिए कि यह क्या नहीं करता है, आपकी जावास्क्रिप्ट का काम करता है।

एक दृष्टिकोण का उपयोग करें जहां आपके पास प्रत्येक तत्व के लिए एक विशिष्ट आईडी है (या वर्ग यदि इसकी सामान्य कार्यक्षमता है) और फिर घटना हैंडलर (ओं) को जोड़ने के लिए प्रगतिशील वृद्धि का उपयोग करें, कुछ इस तरह से:

[c# example only probably not the way you're writing out your js]
Response.Write("<a href=\"/link/for/javascriptDisabled/Browsers.aspx\" id=\"uxAncMyLink\">My Link</a>");

[Javascript]  
document.getElementById('uxAncMyLink').onclick = function(e){

// do some stuff here

    return false;
    }

इस तरह से जेएस अक्षम के साथ उपयोगकर्ताओं के लिए आपका कोड नहीं टूटेगा और इसमें चिंताओं का एक स्पष्ट विभाजन होगा।

आशा है कि उपयोग की है।


1
सी क्यों#? सिर्फ क्यों नहीं <a href="https://stackoverflow.com/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>?
महमूदवक्स

2

मैं आम तौर पर एलिमेंट ईवेंट को सेट करने के लिए एलिमेंट (एट) या एलीट (आईई) या एलिमेंट का उपयोग करने की सलाह देता हूं। उस तत्व के लिए किसी भी मौजूदा ईवेंट हैंडलर को बदल देगा।

संलग्न / addEventListening कई इवेंट हैंडलर बनाने की अनुमति देते हैं।


1

onclickHTML विशेषता का उपयोग करें ।

onclickईवेंट हैंडलर तत्व है जो करने के लिए पर उपयोगकर्ताओं के माउस बटन से एक क्लिक करें घटना कब्जा onclickविशेषता लागू किया जाता है। यह क्रिया आमतौर पर स्क्रिप्ट विधि के लिए कॉल के रूप में होती है जैसे कि जावास्क्रिप्ट फ़ंक्शन [...]


1

यदि आप पृष्ठ लोड होने की प्रतीक्षा नहीं करते हैं तो आप आईडी द्वारा तत्व का चयन नहीं कर पाएंगे। यह समाधान किसी के लिए काम करना चाहिए जिससे कोड को निष्पादित करने में परेशानी हो रही है

<script type="text/javascript">
window.onload = function() {
    document.getElementById("delete").onclick = function() {myFunction()};

    function myFunction() {
        //your code goes here
        alert('Alert message here');
    }
};
</script>

<a href='#' id='delete'>Delete Document</a>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.