क्लिक बटन की आईडी प्राप्त करने के लिए जावास्क्रिप्ट पर क्लिक करें


295

जिस बटन पर क्लिक किया जा रहा है, उसकी आईडी कैसे मिलेगी?

<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>

function reply_click()
{
}

17
@ रॉबिन वैन बालन: आईडी का कन्वेंशन प्रति संवेदी नहीं होना चाहिए , लेकिन वे हो सकते हैं।
विंबिक

जवाबों:


596

आपको फ़ंक्शन पैरामीटर के रूप में आईडी भेजने की आवश्यकता है। इसको ऐसे करो:

<button id="1" onClick="reply_click(this.id)">B1</button>
<button id="2" onClick="reply_click(this.id)">B2</button>
<button id="3" onClick="reply_click(this.id)">B3</button>
    
<script type="text/javascript">
  function reply_click(clicked_id)
  {
      alert(clicked_id);
  }
</script>

इस आईडी भेज देंगे this.idके रूप में clicked_idजो आप अपने कार्य में उपयोग कर सकते हैं। इसे यहां कार्रवाई में देखें।


2
मैं सिर्फ नोट करना चाहता था, किसी के लिए भी एक अच्छा संदर्भ अपवाद मिल रहा है जो JQuery का उपयोग कर रहा है event.target.id(मेरे लिए, फ़ायरफ़ॉक्स और IE दोनों इसे फेंक रहे थे), यह एक महान समाधान है जो सभी तीन प्रमुख ब्राउज़रों में काम करता है।
X3074861X 16

2
भाई, आप इंटरनेट पर एकमात्र व्यक्ति हैं जो मेरे लिए इस तरह से व्याख्या करने में कामयाब रहे। फ़ंक्शन नाम में एक वेरिएबल का उपयोग करना और वास्तविक फ़ंक्शन स्क्रिप्ट में किसी अन्य का उपयोग करने की तुलना में मेरे लिए बिल्कुल कोई मतलब नहीं है! एक छोटे से वाक्य में आपने मुझे समझाया कि फंक्शन ब्रैकेट () में हम जो वेरिएबल डालते हैं और जो हम फंक्शन डिक्लेरेशन पर इस्तेमाल करते हैं, वही काम करते हैं, बस एएस पर पास होता है! ये जबरदस्त है ! आपको मेरे द्वारा दिए गए ज्ञान के लिए मेरे स्वामी को धन्यवाद
डेनिस्लाव करागिओज़ोव

आप वास्तव में अपने html में कोई कोड नहीं चाहते हैं, जैसे <बटन onClick = "">
डेव जैकबी

61

सामान्य तौर पर, चीजों को व्यवस्थित रखना आसान होता है यदि आप अपना कोड और अपना मार्कअप अलग करते हैं। अपने सभी तत्वों को परिभाषित करें, और फिर अपने जावास्क्रिप्ट अनुभाग में, उन तत्वों पर किए जाने वाले विभिन्न कार्यों को परिभाषित करें।

जब कोई ईवेंट हैंडलर कहा जाता है, तो उसे उस तत्व के संदर्भ में बुलाया जाता है, जिस पर क्लिक किया गया था। तो, पहचानकर्ता यह आपके द्वारा क्लिक किए गए DOM तत्व को संदर्भित करेगा। आप उस पहचानकर्ता के माध्यम से तत्व की विशेषताओं तक पहुँच सकते हैं।

उदाहरण के लिए:

<button id="1">Button 1</button>
<button id="2">Button 2</button>
<button id="3">Button 3</button>

<script type="text/javascript">
var reply_click = function()
{
    alert("Button clicked, id "+this.id+", text"+this.innerHTML);
}
document.getElementById('1').onclick = reply_click;
document.getElementById('2').onclick = reply_click;
document.getElementById('3').onclick = reply_click;
</script>

1
क्या होगा यदि बटन एक पुनरावर्तक में हैं और इसलिए गतिशील रूप से उत्पन्न हुए हैं, तो आपको नहीं पता कि आपके पास कितने बटन होंगे?
Amc_rtty

4
ऐसे कई तरीके हैं जिनसे आप निपट सकते हैं। उदाहरण के लिए, जावास्क्रिप्ट को गतिशील रूप से उत्पन्न करें। या, सभी बटनों में एक ही वर्ग जोड़ें, और फिर उस वर्ग नाम के साथ सभी बटन के माध्यम से पुनरावृत्त करें और उस तरह हैंडलर संलग्न करें।
जेसन लेब्रुन

@JasonLeBrun मुझे नहीं पता कि उस तत्व की आईडी क्या है जिसे मैं क्लिक करने वाला हूं। यही मैं ढूंढ रहा हूं। एक कोड एक एसवीजी तत्व खींचता है और जब मैं उस पर क्लिक करता हूं, तो मुझे यह जानना होगा कि यह "आईडी" विशेषता है। यदि और इस कोड का उपयोग कैसे किया जा सकता है?
अरिहंत

46

PURE JAVASCRIPT का उपयोग करना: मुझे पता है कि यह देर हो चुकी है लेकिन भविष्य के लोगों के लिए यह मदद कर सकता है:

HTML भाग में:

<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>

Javascipt नियंत्रक में:

function reply_click()
{
    alert(event.srcElement.id);
}

इस तरह हमें जावास्क्रिप्ट फ़ंक्शन को कॉल करने के समय तत्व की 'आईडी' को बांधने की ज़रूरत नहीं है।


1
मुझे गतिशील कार्यक्षमता के लिए यह विचार पसंद है। मैं PHP / MySQL और JS का उपयोग करके एक गतिशील DB में फ़ंक्शन जोड़ने पर काम कर रहा हूं; यह विशिष्ट गतिशील वर्गों के लिए एक विशिष्ट कार्य जोड़ने के लिए अच्छी तरह से काम करता है। धन्यवाद!
ejbytes

@ कोडिंग क्या आप ब्राउज़र और पर्यावरण का विवरण साझा कर सकते हैं?
प्रतीक

@Prateek फ़ायरफ़ॉक्स, नवीनतम। मुझे केवल स्रोत की आवश्यकता थी, इसलिए मैंने इसके चारों ओर अब thisपैरामीटर के रूप में काम किया onClick(वास्तव में, onClick लेकिन onChange का उपयोग नहीं करते, क्या यह समस्या है?)। मैंने थोड़ा सा भी जाँच किया है और इस eventचर के बारे में बहुत भ्रम होने लगता है - क्या यह एक "अंतर्निहित" पैरामीटर है या क्या इसे तर्क के रूप में स्पष्ट रूप से कहा जाना चाहिए (अर्थात function reply_click(event), जिसे मैंने भी देखा है कुछ स्थान)? क्या यह केवल तब उपलब्ध होता है जब ईवेंट श्रोता के माध्यम से असाइन किया जाता है addEventListener...? मैंने चारों ओर खेला है, लेकिन यह काम करने के लिए नहीं मिल सका।
कोडिंग

3
FYI करें: वैश्विक ईवेंट ऑब्जेक्ट क्रोम में उपलब्ध है, फ़ायरफ़ॉक्स में नहीं।
डेवडेलस्टीन

40

(मुझे लगता है कि idविशेषता को एक पत्र के साथ शुरू करने की आवश्यकता है। गलत हो सकता है।)

आप घटना के प्रतिनिधिमंडल के लिए जा सकते हैं ...

<div onClick="reply_click()">
    <button id="1"></button>
    <button id="2"></button>
    <button id="3"></button>
</div>

function reply_click(e) {
    e = e || window.event;
    e = e.target || e.srcElement;
    if (e.nodeName === 'BUTTON') {
        alert(e.id);
    }
}

... लेकिन यह आपको निराला घटना मॉडल के साथ अपेक्षाकृत आरामदायक होने की आवश्यकता है।


1
यह काम नहीं करेगा। आपने onclick विशेषता में कोड निर्दिष्ट किया है, जो answer_click को बिना किसी तर्क के कहता है। इसलिए, कोई भी तर्क वितर्क समारोह में नहीं जाएगा।
जेसन लेब्रन

1
और "आईडी" विशेषता का मूल्य किसी भी स्ट्रिंग हो सकता है। यह एक पत्र के साथ शुरू करने की जरूरत नहीं है।
जेसन लेब्रन

@ जैसन वास्तव में, सभी अच्छे आधुनिक ब्राउज़रों में, eतर्क स्वतः उत्पन्न होता है। यदि ऐसा नहीं है, तो हमें IE6-8 के साथ काम करना चाहिए, जो इसके बजाय उस उपयोगी वस्तु को प्रदान करता है window.event
सलीडीहसीरहक


6
@sdleihssirhc वास्तव में, आप बहुत-और-अभिमानी हैं, कि सभी HTML5 के साथ बदल जाते हैं
सलीडीहसीरहक

28
<button id="1" onClick="reply_click(this)"></button>
<button id="2" onClick="reply_click(this)"></button>
<button id="3" onClick="reply_click(this)"></button>

function reply_click(obj)
{
var id = obj.id;
}

18
<button id="1" class="clickMe"></button>
<button id="2" class="clickMe"></button>
<button id="3" class="clickMe"></button>

<script>
$('.clickMe').click(function(){
    alert(this.id);
});
</script>

14

बिना इनलाइन जावास्क्रिप्ट के कैसे करें

यह आमतौर पर इनलाइन जावास्क्रिप्ट से बचने के लिए अनुशंसित है, लेकिन शायद ही कभी इसका उदाहरण है कि यह कैसे करना है।
यहाँ घटनाओं को बटन से जोड़ने का मेरा तरीका है।
मैं एक साधारण onClickविशेषता की तुलना में अनुशंसित विधि की तुलना में पूरी तरह खुश नहीं हूं ।

2014 केवल ब्राउज़र

<button class="btn">Button</button>
<script>
let OnEvent = (doc) => {
    return {
        on: (event, className, callback) => {
            doc.addEventListener('click', (event)=>{
                if(!event.target.classList.contains(className)) return;
                callback.call(event.target, event);
            }, false);
        }
    }
};


OnEvent(document).on('click', 'btn', function (e) {
    window.console.log(this, e);
});

</script>

केवल 2013 ब्राउज़र

<!DOCTYPE html>
<html>
<head>
<script>
(function(doc){
    var hasClass = function(el,className) {
        return el.classList.contains(className);
    }
    doc.addEventListener('click', function(e){
      if(hasClass(e.target, 'click-me')){
          e.preventDefault();
          doSomething.call(e.target, e);
      }
    });
})(document);

function insertHTML(str){
  var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
  lastScript.insertAdjacentHTML("beforebegin", str);
}

function doSomething(event){
  console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>

<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script>
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>

<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">

<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>

</body>
</html>

क्रॉस ब्राउज़र

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
(function(doc){
    var cb_addEventListener = function(obj, evt, fnc) {
        // W3C model
        if (obj.addEventListener) {
            obj.addEventListener(evt, fnc, false);
            return true;
        } 
        // Microsoft model
        else if (obj.attachEvent) {
            return obj.attachEvent('on' + evt, fnc);
        }
        // Browser don't support W3C or MSFT model, go on with traditional
        else {
            evt = 'on'+evt;
            if(typeof obj[evt] === 'function'){
                // Object already has a function on traditional
                // Let's wrap it with our own function inside another function
                fnc = (function(f1,f2){
                    return function(){
                        f1.apply(this,arguments);
                        f2.apply(this,arguments);
                    }
                })(obj[evt], fnc);
            }
            obj[evt] = fnc;
            return true;
        }
        return false;
    };
    var hasClass = function(el,className) {
        return (' ' + el.className + ' ').indexOf(' ' + className + ' ') > -1;
    }

    cb_addEventListener(doc, 'click', function(e){
      if(hasClass(e.target, 'click-me')){
          e.preventDefault ? e.preventDefault() : e.returnValue = false;
          doSomething.call(e.target, e);
      }
    });
})(document);

function insertHTML(str){
  var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
  lastScript.insertAdjacentHTML("beforebegin", str);
}

function doSomething(event){
  console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>

<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script type="text/javascript">
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>

<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">

<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>

</body>
</html>

JQuery के साथ क्रॉस-ब्राउज़र

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
(function($){
    $(document).on('click', '.click-me', function(e){
      doSomething.call(this, e);
    });
})(jQuery);

function insertHTML(str){
  var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
  lastScript.insertAdjacentHTML("beforebegin", str);
}

function doSomething(event){
  console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>

<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script type="text/javascript">
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>

<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">

<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>

</body>
</html>

दस्तावेज़ तैयार होने से पहले आप इसे चला सकते हैं, बटन पर क्लिक करने से काम चल जाएगा क्योंकि हम घटना को दस्तावेज़ में संलग्न करते हैं।

यहाँ एक jsfiddle है
कुछ अजीब कारण से insertHTMLफ़ंक्शन इसमें काम नहीं करता है, भले ही यह मेरे सभी ब्राउज़रों में काम करता है।

तुम हमेशा के insertHTMLसाथ प्रतिस्थापित कर सकते हैं document.writeयदि आपको कोई आपत्ति नहीं है तो यह कमियां हैं

<script>
document.write('<button class="click-me" id="btn1">Button 1</button>');
</script>

सूत्रों का कहना है:


मैं हमेशा सोच रहा हूं कि कैसे इनलाइन ऑनक्लिक्स के रूप में ईवेंट कुशल (प्रदर्शन-वार) हो सकते हैं। मुझे लगता है कि उन्हें ट्रैक रखने के लिए कठिन होना चाहिए?
gabn88

अपने वर्ग के नामकरण सम्मेलन पर निर्भर करता है, यदि सम्मेलन सार्थक है, तो ऑनक्लिक्स के रूप में ढूंढना आसान होगा
टिमो हुओवेंन

11

यदि आप ऑन्कलिक फ़ंक्शन के लिए कोई तर्क पारित नहीं करना चाहते हैं, event.targetतो क्लिक किए गए तत्व को प्राप्त करने के लिए उपयोग करें:

<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>

function reply_click()
{
    // event.target is the element that is clicked (button in this case).
    console.log(event.target.id);
}

7

शुद्ध जावास्क्रिप्ट के साथ आप निम्नलिखित कार्य कर सकते हैं:

var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for (var i = 0; i < buttonsCount; i += 1) {
    buttons[i].onclick = function(e) {
        alert(this.id);
    };
}​

इसे JsFiddle पर देखें


1
आपका कोड कहता है:
अनकैप्ड टाइपर्रर:

1
ऐसा इसलिए है क्योंकि आपके HTML में कोई बटन नहीं है
vidstige

6

आप बस इसे इस तरह से कर सकते हैं:

<input type="button" id="1234" onclick="showId(this.id)" value="click me to show my id"/>
<script type="text/javascript">
   function showId(obj) {
        var id=obj;
        alert(id);
   }


आप वर काट सकता है id=obj;और बस हैalert(obj);
डोगे

मुझे लगता है कि यह स्वीकृत उत्तर होना चाहिए, और "(यह .id)" मेरे लिए अभी एफएफ, आईई और क्रोम में काम किया है।
जॉन कोम्ब्स

6
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>

function reply_click()
{
   console.log(window.event.target.id)
}

4
 <button id="1"class="clickMe"></button>

<button id="2" class="clickMe"></button>

<button id="3" class="clickMe"></button>



$('.clickMe').live('click',function(){

var clickedID = this.id;

});

3

बटन 1 बटन 2 बटन 3

var reply_click = function() { 
     alert("Button clicked, id "+this.id+", text"+this.innerHTML); 
} 
document.getElementById('1').onclick = reply_click; 
document.getElementById('2').onclick = reply_click; 
document.getElementById('3').onclick = reply_click;

2

यदि आप ऐसा करते हैं, तो इसका उत्तर देर से माफ करें, लेकिन यह बहुत जल्दी है: -

$(document).ready(function() {
  $('button').on('click', function() {
     alert (this.id);
  });
});

इससे क्लिक किए गए किसी भी बटन की आईडी मिल जाती है।

यदि आप केवल एक निश्चित स्थान पर क्लिक किए गए बटन का मूल्य प्राप्त करना चाहते हैं, तो उन्हें कंटेनर में रखें

<div id = "myButtons"> buttons here </div>

और कोड को इसमें बदलें: -

 $(document).ready(function() {
      $('.myButtons button').on('click', function() {
         alert (this.id);
      });
    });

आशा है कि ये आपकी मदद करेगा


1
मुझे लगता है कि myButtons एक आईडी है और आप इसे एक डॉट (।) के साथ jquery में एक वर्ग चयनकर्ता के रूप में उपयोग कर रहे हैं। मुझे लगता है कि यह # के साथ शुरू होना चाहिए।
शशि वर्मा

0

यह उस तत्व की आईडी को लॉग करेगा जिसे क्लिक किया गया है: addFields।

<button id="addFields" onclick="addFields()">+</button>

<script>

function addFields(){ 
    console.log(event.toElement.id)
}

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