Reputation: 75
I am trying to clone div and add eventlistener to that particular object. The problem is that the eventlistener applies to all previous objects so I guess it's probably not possible to do it via clone. Please see the example below - when I add e.g. 3 divs and change any option within any of them, it alerts 3 times instead of just once. Simply said, I want to dynamically add event listener to cloned object without affecting the previous ones.
document.getElementById("add_btn").onclick = function() {
$('.lang-div:first').clone().insertAfter($('.lang-div:last'));
//var last_lang_div = $('.lang-div:last');
add_onchange_event();
}
function add_onchange_event() {
this.addEventListener('change', (function(obj) {
return function() {
alert('should alert just once');
}
})(this));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="lang-div">
<select id="language">
<option>english</option>
<option>spanish</option>
<option>german</option>
</select>
</div>
<button id="add_btn">Add language</button>
https://codepen.io/azej/pen/yEvwjO
Upvotes: 0
Views: 150
Reputation: 177975
$("#add_btn").on("click",function() {
$('.lang-div:first').clone(true).insertAfter($('.lang-div:last'));
});
$("#wrapper").on("change",".language",function() {
console.log(this.value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
<div class="lang-div">
<select class="language">
<option value="None">Please select</option>
<option value="English">English</option>
<option value="Spanish">Spanish</option>
<option value="German">German</option>
</select>
</div>
</div>
<button type="button" id="add_btn">Add language</button>
Upvotes: 1