I’m using JQuery with HTML to create a button that when clicked, loads table rows.
My HTML:
<div class="load-more-container">
<button id="btn-load-more">Load More</button>
</div>
<p id="loading" style="display:none"> Loading ... </p>
My js:
$("#btn-load-more").on("click", function (event) {
event.preventDefault();
$("#btn-load-more").prop("disabled", true)
$("#loading").show();
//loading table rows
$("#btn-load-more").prop("disabled", false)
$("#loading").hide();
})
I want my button to be disabled when I click on it, and a “Loading…” text will be displayed.
After loading finishes, I want to enable my button again and hide the “Loading…” text.
Currently, the “Loading…” text is only shown after the rows are loaded and not when the rows are loading(my intent).
Can anyone advice me on what’s wrong with my js? Appreciate it!
Edit: Here is a minimum reproducible example. The Loading p tag is not showing when I click on the button with the provided JS code.
$(document).ready(function (){
$("#my-table-tbody tr").slice(2).hide()
if ($("#my-table-tbody tr:hidden").length == 0){
$("#btn-load-more").hide()
}
$("#btn-load-more").on("click", function (event) {
event.preventDefault();
$("#loading").show();
$("#my-table-tbody tr:hidden").slice(0,2).slideDown("fast", function(){
$("#loading").hide();
})
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.6.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
<div>
<table id="my-table">
<thead>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
</thead>
<tbody>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
</tbody>
</table>
<button id="btn-load-more" style="cursor: pointer">Load More</button>
<p id="loading" style="text-align:center; display:none"> Loading ... </p>
</div>
showLoader(); setTimeout(loadRows, 1);function loadRows() { .... hideLoader(); }- don't close the loader on the timeout