জাভাস্ক্রিপ্ট - ক্লিক করা বোতামটির আইডি পেতে অন্লিক করুন


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
@ রবিন ভ্যান বালেন: আইডি এর কনভেনশন অনুযায়ী সংখ্যা হওয়া উচিত নয়, তবে সেগুলি হতে পারে।
উইলিয়াম্বাক

উত্তর:


595

ফাংশন পরামিতি হিসাবে আপনাকে আইডি প্রেরণ করতে হবে। এটা এভাবে করো:

<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
আমি কেবল খেয়াল করতে চেয়েছিলাম, যে কেউ জাউকিউরির event.target.id(আমার জন্য ফায়ারফক্স এবং আইই উভয়ই এটি ছুঁড়ে মারছিল) ব্যবহার করে নাল রেফারেন্সের ব্যতিক্রম পাচ্ছে , এটি একটি দুর্দান্ত সমাধান যা তিনটি প্রধান ব্রাউজারে কাজ করে।
X3074861X

2
ভাই, আপনি ইন্টারনেটের একমাত্র ব্যক্তি যিনি আমার পক্ষে এই কাজটি করার জন্য ব্যাখ্যা করতে সক্ষম হন। ফাংশনটির নামটিতে একটি ভেরিয়েবল ব্যবহার করা এবং প্রকৃত ফাংশন স্ক্রিপ্টে অন্যটি ব্যবহার করা আমার পক্ষে একেবারেই বোধগম্য নয়! একটি সংক্ষিপ্ত বাক্যে আপনি আমাকে বুঝিয়ে দিয়েছিলেন যে ফাংশন বন্ধনীতে আমরা যে ভেরিয়েবল রেখেছি () এবং ফাংশন ঘোষণায় আমরা যেটি ব্যবহার করি তা একই জিনিস, সবে AS তে পাস! ইহা অসাধারণ ! আপনি আমাকে যে জ্ঞান দান করেছেন তার জন্য হুজুরকে ধন্যবাদ
জানাই

<< বোতাম অন ক্লিক = "">
ডেভ জ্যাকোবি

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
কী যদি বোতামগুলি পুনরায় পুনরায় প্রদর্শিত হয় এবং সেইজন্য গতিশীলভাবে উত্পন্ন হয়, তবে আপনার কয়টি বোতাম থাকবে তা আপনি জানেন না?
এমসি_রট্টি

4
আপনি এটি পরিচালনা করতে পারেন এমন অনেকগুলি উপায় রয়েছে। উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট গতিশীল জেনারেট করুন। বা, সমস্ত বোতামে একই শ্রেণি যুক্ত করুন এবং তারপরে সেই শ্রেণীর নামের সাথে সমস্ত বোতামে পুনরাবৃত্তি করুন এবং হ্যান্ডলারটি সেভাবে সংযুক্ত করুন।
জেসন লেব্রুন

@ জেসনলেব্রুন আমি জানি না যে আমি যে উপাদানটি ক্লিক করতে যাচ্ছি তার আইডি কী। আমি এটিই সন্ধান করছি। একটি কোড একটি এসভিজি উপাদান আঁকে এবং আমি যখন এটিতে ক্লিক করি তখন আমার এটি "আইডি" বৈশিষ্ট্যটি জানতে হবে। যদি এবং কিভাবে এই কোড ব্যবহার করা যেতে পারে?
অরিহন্ত

45

খাঁটি জাভাস্ক্রিপ্ট ব্যবহার: আমি জানি এটি দেরি হয়ে গেছে তবে ভবিষ্যতে লোকেরা এটি যে সাহায্য করতে পারে তা হতে পারে:

এইচটিএমএল অংশে:

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

জাভাস্কিপ্ট কন্ট্রোলারে:

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

এইভাবে জাভাস্ক্রিপ্ট ফাংশন কল করার সময় আমাদের এলিমেন্টের 'আইডি' আবদ্ধ করতে হবে না।


1
আমি গতিশীল কার্যকারিতা জন্য এই ধারণা পছন্দ করি। আমি পিএইচপি / মাইএসকিউএল এবং জেএস ব্যবহার করে একটি গতিশীল ডিবিতে ফাংশন যুক্ত করার কাজ করছি; নির্দিষ্ট গতিশীল ক্লাসে একটি নির্দিষ্ট ফাংশন যুক্ত করার জন্য এটি ভাল কাজ করে। ধন্যবাদ!
ইজবাইটস

@ কোডেলিং আপনি ব্রাউজার এবং পরিবেশের বিশদ ভাগ করে নিতে পারেন?
প্রীতেক

@ প্রীতেক ফায়ারফক্স, সর্বশেষ। আমার কেবল উত্সের প্রয়োজন ছিল, তাই আমি এখন thisপ্যারামিটার হিসাবে পাস করে এটি ঘিরে কাজ করেছি onClick(আসলে, অনক্লিক নয় তবে অনচেনজ ব্যবহার করা, এটিই কি সমস্যা?)। আমি কিছুটা পরীক্ষা করে দেখেছি এবং এই eventভেরিয়েবলটি প্রায় ঘুরে বেড়াতে গিয়ে অনেক বিভ্রান্তি আছে বলে মনে হচ্ছে - এটি কি "অন্তর্নিহিত" পরামিতি বা এটি কি যুক্তি হিসাবে স্পষ্ট করে বলতে হবে (যেমন function reply_click(event), আমি এটিও দেখেছি) কিছু লোকেশন)? এটি কেবল ইভেন্টের শ্রোতাদের addEventListener... এর মাধ্যমে অর্পণ করার সময় কি পাওয়া যায় ? আমি প্রায় খেলেছি, কিন্তু এটি কাজ করতে পারে না।
কোডিং করা

3
এফওয়াইআই: বিশ্বব্যাপী ইভেন্ট অবজেক্ট ফায়ারফক্স নয় ক্রোমে উপলব্ধ।
ডেভএডেলস্টাইন

40

(আমি মনে করি idগুণটি একটি চিঠি দিয়ে শুরু করা দরকার wrong ভুল হতে পারে))

আপনি ইভেন্ট প্রতিনিধি দলের জন্য যেতে পারেন ...

<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
এটি কাজ করবে না। আপনি অনক্লিক অ্যাট্রিবিউটে কোড নির্দিষ্ট করেছেন যা কোনও যুক্তি ছাড়াই উত্তর_ ক্লিক করুন। সুতরাং, কোনও ইভেন্টের তর্কটি ফাংশনে পাস করা হবে না।
জেসন লেব্রুন

1
এবং "আইডি" বৈশিষ্ট্যের মান যে কোনও স্ট্রিং হতে পারে। এটি একটি চিঠি দিয়ে শুরু করতে হবে না।
জেসন লেব্রুন

@ জেসন আসলে, সমস্ত ভাল আধুনিক ব্রাউজারে, eযুক্তিটি স্বয়ংক্রিয়ভাবে উত্পন্ন হয়। যদি তা না হয় তবে আমাদের অবশ্যই আই 6-8 এর সাথে ডিল করতে হবে, যা পরিবর্তে সেই দরকারী অবজেক্টের মাধ্যমে সরবরাহ করে window.event
sdleihssirhc

@ জেসন এছাড়াও, আইডিস সংখ্যা দিয়ে শুরু করতে পারে না
sdleihssirhc

6
@sdleihssirhc প্রকৃতপক্ষে, আপনি অহংকারী তাই তাই, এইচটিএমএল 5 এর সাথে সমস্ত পরিবর্তন হয়
sdleihssirhc

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;
}


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);
    };
}​

এটি জেএসফিডেলে চেক করুন


1
আপনার কোড বলে: আনকড টাইপ এরিয়ার: অপরিশোধিত
অ্যালেক্স 351

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);
ডেজ

আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত এবং "(this.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
আমি মনে করি যে মাইবাটনগুলি একটি আইডি এবং আপনি এটি বিন্দু (।) দিয়ে জেকুরিতে শ্রেণি নির্বাচক হিসাবে ব্যবহার করছেন I আমি মনে করি এটি # দিয়ে শুরু করা উচিত।
শশী ভার্মা

0

এটি ক্লিক করা হয়েছে এমন উপাদানটির আইডি লগ করবে: অ্যাডফিল্ডস।

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

<script>

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

</script>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.