I have a problem where I need to dynamically add onclick events in javascript buttons using variables that the user gives. The problem: These variables will change, but I dont want the onclick events to all change!!
I wrote up a mini example that mimics the setup I have (but obviously getting rid of unnecessary parts and therefore looks a bit silly).
NOTE: I tried to clone the variable using these:
1) clone = Object.assign({}, old); 2) clone = JSON.parse(JSON.stringify(old);
Neither worked
Here is the codepen: https://codepen.io/samuel-solomon/pen/ExPqdpM
HTML:
<div id="1"></div>
CSS
button { width: 50px; height: 50px; } .blue{background-color: blue;} .black{background-color: black;}
Javascript
btn1 = document.createElement('button'); var one_class = "button black"; btn1.className = one_class; btn1.addEventListener('click', function() {btn1.className = one_class;}) add_first = document.getElementById('1'); add_first.appendChild(btn1).html; one_class = "button blue"
Advertisement
Answer
You can use Function#bind
to designate a specific value as the first parameter of the event handler. This will work as one_class
is a string primitive.
btn1.addEventListener('click', function(cls, event) { btn1.className = cls; }.bind(null, one_class));