ऑनक्लिक ईवेंट में कई जावास्क्रिप्ट फ़ंक्शन कैसे कॉल करें?


241

क्या onclickएक से अधिक जावास्क्रिप्ट फ़ंक्शन को कॉल करने के लिए html विशेषता का उपयोग करने का कोई तरीका है ?


जवाबों:


390
onclick="doSomething();doSomethingElse();"

लेकिन वास्तव में, आप onclickअपने जावास्क्रिप्ट कोड के माध्यम से इवेंट हैंडलर को डोम नोड में संलग्न करने और उपयोग करने से बेहतर हैं । इसे विनीत जावास्क्रिप्ट के रूप में जाना जाता है ।


1
विनीत जेएस के संदर्भ के लिए धन्यवाद, मैं इससे पहले आया हूं, और मुझे अप्रिय जेएस लिखने से बचना चाहिए क्योंकि मैं आलसी हूं! xD
Qcom

9
कोई संभावना नहीं ... मैं भी jQuery की अत्यधिक अनुशंसा करता हूं जो वास्तव में आपके विनीत लक्ष्य के साथ आपकी सहायता करेगा। आप ईवेंट तत्वों को आसानी से DOM तत्वों से जोड़ सकते हैं और बहुत अधिक सभी विनीत रूप से कर सकते हैं। मैंने इसे 2 साल तक इस्तेमाल किया है और फिर कभी पीछे मुड़कर नहीं देखा।
ब्रैड

4
यदि ऑन्कलिक में एक बुलाया कार्रवाई विफल हो जाती है, तो पूरी चीज एक डोमिनोज़ चेन की तरह गिर जाती है और ऑन्कलिक काम करने में विफल हो जाता है।
फियास्को लैब्स

8
यह html विशेषता वास्तव में onclick=""नहीं है onClick=""। यह बहुत सामान्य गलती है।
ड्रू

2
@ शुभमछपरा आप जिस बारे में बात कर रहे हैं वह jsxनहीं है htmlऔर इस सवाल के साथ टैग नहीं किया गया हैjsx
ड्रू

75

1 फ़ंक्शन के साथ एक लिंक परिभाषित किया गया है

<a href="#" onclick="someFunc()">Click me To fire some functions</a>

से कई कार्य फायरिंग someFunc()

function someFunc() {
    showAlert();
    validate();
    anotherFunction();
    YetAnotherFunction();
}

5
IMHO, यह सही प्रोग्रामर का दृष्टिकोण है।
b1nary.atr0phy

2
@ b1nary.atr0phy nope प्रोग्रामर का तरीका यह है कि जब उपयोगकर्ता के पास कोई जावास्क्रिप्ट न हो तो उसके लिए एक href = "" विशेषता जोड़ें। फिर, जावास्क्रिप्ट के साथ (ताकि आप जानते हैं कि उपयोगकर्ता इसका समर्थन करता है) आप href हटाते हैं, और ईवेंट श्रोताओं को ईवेंट में शामिल करते हैं। इस तरह, यदि आपके कोड का कोई अन्य मॉड्यूल एक ही क्लिक को सुनेगा, तो यह ओवरराइट नहीं किया जाता है, या आपके कोड को अधिलेखित नहीं करता है। पढ़ें: developer.mozilla.org/en-US/docs/Web/API/Event
gcb

3
यदि आपके पास फ़ंक्शन के लिए कोई तर्क दिया जा रहा है, तो यह अच्छी तरह से काम नहीं कर सकता है, खासकर यदि आप सर्वर-साइड भाषा से उन तर्कों को उत्पन्न करते हैं। सर्वर और क्लाइंट दोनों पर सभी संभावित पुनरावृत्तियों का परीक्षण करने के बजाय सर्वर-साइड भाषा में फ़ंक्शन (किसी भी तर्क के साथ) को जोड़कर कोड का निर्माण / रखरखाव करना आसान होगा।
साइफन

यह बहुत सुंदर और सुरुचिपूर्ण है
Tessaracter

38

यह आवश्यक कोड है यदि आप केवल जावास्क्रिप्ट का उपयोग कर रहे हैं और jQuery का नहीं

var el = document.getElementById("id");
el.addEventListener("click", function(){alert("click1 triggered")}, false);
el.addEventListener("click", function(){alert("click2 triggered")}, false);

7
यह सही उत्तर और इसे करने का सही तरीका होना चाहिए।
फ्यूजन

11

मैं element.addEventListenerइसे किसी फ़ंक्शन से लिंक करने के लिए विधि का उपयोग करूंगा । उस फ़ंक्शन से आप कई फ़ंक्शन कॉल कर सकते हैं।

एक घटना को किसी एक समारोह में बाँधने और फिर कई फ़ंक्शन कॉल करने में मुझे जो लाभ दिखाई देता है, वह यह है कि आप कुछ त्रुटि जाँच कर सकते हैं, कुछ और हैं तो कुछ कथन ताकि कुछ फ़ंक्शन केवल तभी प्राप्त हों जब कुछ मानदंड पूरे हों।


9

ज़रूर, बस इसे कई श्रोताओं को बांधें।

Short cutting with jQuery

$("#id").bind("click", function() {
  alert("Event 1");
});
$(".foo").bind("click", function() {
  alert("Foo class");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo" id="id">Click</div>


@ हंटर: मैं jQuery के साथ शॉर्ट कटिंग कर रहा था। मुझे मूल घटना श्रोता कोड बिल्कुल याद नहीं है। आप यह भी कर सकते हैं कि मार्को ने क्या उल्लेख किया है, लेकिन इवेंट श्रोता का उपयोग करना बेहतर है।
जोश के

1
मूल प्रश्न का उत्तर नहीं दे सकता है, लेकिन जब से मैं jQuery का उपयोग कर रहा हूं, तो उसने मेरा उत्तर दिया।
फ़िस्को लैब्स

1
सादे पुराने जावास्क्रिप्ट के साथ ऐसा करने का कोई तरीका?
कोडिबुस्टीन


2

var btn = document.querySelector('#twofuns');
btn.addEventListener('click',method1);
btn.addEventListener('click',method2);
function method2(){
  console.log("Method 2");
}
function method1(){
  console.log("Method 1");
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Pramod Kharade-Javascript</title>
</head>
<body>
<button id="twofuns">Click Me!</button>
</body>
</html>

आप एक या एक से अधिक तरीकों से एक ईवेंट को प्राप्त / कॉल कर सकते हैं।


1

यदि आप onclickhtml में दूसरा प्रायश्चित करते हैं तो भी आप इसे कई बार जोड़ सकते हैं, भले ही इसे अनदेखा कर दिया जाए, और click2 triggeredकभी भी प्रिंट नहीं किया जाता है, आप कार्रवाई में एक जोड़ सकते हैं, mousedownलेकिन यह सिर्फ एक समाधान है।

तो सबसे अच्छा करने के लिए उन्हें कोड के रूप में जोड़ने के लिए है:

var element = document.getElementById("multiple_onclicks");
element.addEventListener("click", function(){console.log("click3 triggered")}, false);
element.addEventListener("click", function(){console.log("click4 triggered")}, false);
<button id="multiple_onclicks" onclick='console.log("click1 triggered");' onclick='console.log("click2 triggered");' onmousedown='console.log("click mousedown triggered");'  > Click me</button>

आपको ध्यान रखने की आवश्यकता है क्योंकि घटनाएं ढेर हो सकती हैं, और यदि आप कई घटनाओं को जोड़ते हैं, तो आप उस क्रम की ढीली गिनती कर सकते हैं जो वे भाग रहे हैं।


1

अनुरक्षण जावास्क्रिप्ट के लिए एक अतिरिक्त, एक नामित फ़ंक्शन का उपयोग कर रहा है।

यह अनाम फ़ंक्शन का उदाहरण है:

var el = document.getElementById('id');

// example using an anonymous function (not recommended):
el.addEventListener('click', function() { alert('hello world'); });
el.addEventListener('click', function() { alert('another event') });

लेकिन कल्पना कीजिए कि आप उनमें से एक ही तत्व से जुड़े हैं और उनमें से एक को निकालना चाहते हैं। उस ईवेंट श्रोता से एक भी अनाम फ़ंक्शन को निकालना संभव नहीं है।

इसके बजाय, आप नामित कार्यों का उपयोग कर सकते हैं:

var el = document.getElementById('id');

// create named functions:
function alertFirst() { alert('hello world'); };
function alertSecond() { alert('hello world'); };

// assign functions to the event listeners (recommended):
el.addEventListener('click', alertFirst);
el.addEventListener('click', alertSecond);

// then you could remove either one of the functions using:
el.removeEventListener('click', alertFirst);

यह आपके कोड को पढ़ने और बनाए रखने में बहुत आसान बनाता है। खासकर अगर आपका फंक्शन बड़ा है।


अधिक जानकारी के लिए, "ट्यूटोरियल" एवेलक्स में एक अच्छा वीडियो है जिसे मैं इस विषय के बारे में सुझा सकता हूं: youtube.com/watch?v=7UstS0hsHgI
Remi

0

आप सभी फ़ंक्शन को एक में लिख सकते हैं और उन्हें कॉल कर सकते हैं। रामदास जैसे पुस्तकालयों में एक से अधिक फ़ंक्शन लिखने के लिए एक फ़ंक्शन है।

<a href="#" onclick="R.compose(fn1,fn2,fn3)()">Click me To fire some functions</a>

या आप रचना को js फ़ाइल में एक अलग कार्य के रूप में रख सकते हैं और उसे कॉल कर सकते हैं

const newFunction = R.compose(fn1,fn2,fn3);


<a href="#" onclick="newFunction()">Click me To fire some functions</a>

0

यह ब्रैड एज़र का विकल्प है - आप निम्नानुसार अल्पविराम का उपयोग कर सकते हैं

onclick="funA(), funB(), ..."

हालांकि इस दृष्टिकोण का उपयोग नहीं करना बेहतर है - छोटी परियोजनाओं के लिए आप केवल एक फ़ंक्शन कॉलिंग (अधिक: अद्यतन विनीत जावास्क्रिप्ट ) के मामले में ऑनक्लिक का उपयोग कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.