Reputation: 533
Here is my JS
$('.data').click(function(){
var datacontent = $(this).attr('data-content');
$(this).parent().html('').append(`
<div class="wrap">
<p>${data[datacontent].content}</p>
<div class="data" data-content="0">data 1</div>
<div class="data" data-content="1">data 2</div>
</div>
`
});
My full code :
var data = [{
"content": "first content"
},
{
"content": "second content"
}
];
$('.data').click(function() {
var datacontent = $(this).attr('data-content');
//alert (datacontent)
$(this).parent().html('').append(`
<div class="wrap">
<p>${data[datacontent].content}</p>
<div class="data" data-content="0">data 1</div>
<div class="data" data-content="1">data 2</div>
</div>
`)
});
.data {
background: tomato;
color: white;
padding: 8px;
display: inline;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrap">
<p>
Hi, Please click data
</p>
<div class="data" data-content="0">data 1</div>
<div class="data" data-content="1">data 2</div>
</div>
I cannot click data 2
I add previous HTML (<div class="data" data-content="0">
and <div class="data" data-content="1">
) in append.
Any idea to fix my issue?
Thank you
Upvotes: 0
Views: 46
Reputation: 21
please try
var data = [{
"content": "first content"
},
{
"content": "second content"
}
];
//$('.data').click(function() {
$(document).on('click','.data', function(){
var datacontent = $(this).attr('data-content');
//alert (datacontent)
$(this).parent().html('').append(`
<div class="wrap">
<p>${data[datacontent].content}</p>
<div class="data" data-content="0">data 1</div>
<div class="data" data-content="1">data 2</div>
</div>
`)
});
Upvotes: 1
Reputation: 8751
You don't need to replace whole html code, but just the siblings p
tag only.
var data = [{
"content": "first content"
},
{
"content": "second content"
}
];
$('.data').on('click', function(e) {
var datacontent = $(this).attr('data-content');
$(this).siblings("p").html(data[datacontent].content)
});
.data {
background: tomato;
color: white;
padding: 8px;
display: inline;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrap">
<p>
Hi, Please click data
</p>
<div class="data" data-content="0">data 1</div>
<div class="data" data-content="1">data 2</div>
</div>
Upvotes: 0
Reputation: 781141
You're replacing the .data
elements that had the event handler attached to them.
It would be better if you just wrote into the <p>
instead of rewriting the entire DIV.
var data = [{
"content": "first content"
},
{
"content": "second content"
}
];
$('.data').click(function() {
var datacontent = $(this).data('content');
//alert (datacontent)
$(this).siblings("p").text(data[datacontent].content)
});
.data {
background: tomato;
color: white;
padding: 8px;
display: inline;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrap">
<p>
Hi, Please click data
</p>
<div class="data" data-content="0">data 1</div>
<div class="data" data-content="1">data 2</div>
</div>
If you really need to replace the whole thing, see Event binding on dynamically created elements?
Upvotes: 1