There was a requirement of deleting multiple options from a listbox using JavaScript. User can select multiple items from a Listbox. Once the delete button is pressed, remove all the values that are selected from the combobox. Now the most intuitive solution for this problem would be to iterate through each option from the listbox and delete it if it is selected. So one would write following piece of HTML & JavaScript.
Define a simple listbox with id lsbox and two buttons, Delete & Reset.
<table>
<tr>
<td align="center">
<select id="lsbox" name="lsbox" size="10" multiple>
<option value="1">India</option>
<option value="2">United States</option>
<option value="3">China</option>
<option value="4">Italy</option>
<option value="5">Germany</option>
<option value="6">Canada</option>
<option value="7">France</option>
<option value="8">United Kingdom</option>
</select>
</td>
</tr>
<tr>
<td align="center">
<button onclick="listbox_remove('lsbox');">Delete</button>
<button onclick="window.location.reload();">Reset</button>
</td>
</tr>
</table>
Code language: HTML, XML (xml)
Below is the JavaScript code.
function listbox_remove(sourceID) {
//get the listbox object from id.
var src = document.getElementById(sourceID);
//iterate through each option of the listbox
for(var count = 0; count < src.options.length; count--) {
//if the option is selected, delete the option
if(src.options[count].selected == true) {
try {
src.remove(count, null);
} catch(error) {
src.remove(count);
}
}
}
}
Code language: JavaScript (javascript)
That’s it right? Wait, this wont work correctly. Each time you delete an option using src.remove()
method, the remaining option’s index will decrease by 1. So if you have selected multiple values to delete, this wont behave as you expected. Check out the below demo:
In following demo, we used the normal approach (above javascript) to remove the options.
So we know the problem now. Each time the value is deleted, the index of option is decremented. So the ideal approach must be to iterate through the options of listbox in opposite way. Thus we start with the last options and iterate till first.
Notice the loop highlighted line. We are iterating in opposite direction.
function listbox_remove(sourceID) {
//get the listbox object from id.
var src = document.getElementById(sourceID);
//iterate through each option of the listbox
for(var count= src.options.length-1; count >= 0; count--) {
//if the option is selected, delete the option
if(src.options[count].selected == true) {
try {
src.remove(count, null);
} catch(error) {
src.remove(count);
}
}
}
}
Code language: JavaScript (javascript)
Following is the demo with correct JavaScript.
In following demo, we used the correct approach (javascript) to remove the values.
Hope this helps!
Delete_Multiple_Values_Listbox.zip (1.2 KB)
It seems that the above code in JavaScript can be replaced with a single JQuery syntax to remove selected items from a listbox. Thanks Ali for the code snippet. Below is the JQuery code for same:
$("#sourceId").find('option:selected').remove();
Code language: JavaScript (javascript)
Java URL Encoder/Decoder Example - In this tutorial we will see how to URL encode/decode…
Show Multiple Examples in OpenAPI - OpenAPI (aka Swagger) Specifications has become a defecto standard…
Local WordPress using Docker - Running a local WordPress development environment is crucial for testing…
1. JWT Token Overview JSON Web Token (JWT) is an open standard defines a compact…
GraphQL Subscription provides a great way of building real-time API. In this tutorial we will…
1. Overview Spring Boot Webflux DynamoDB Integration tests - In this tutorial we will see…
View Comments
Nice post Viral..
i this this is crazy way compare with this jquery way
$("#sourceId").find('option:selected').remove();
Thanks for the code snippet Ali.. I have added this in above tutorial.
hi...I tried with the Jquery code..it doesn't work..I believe this is the one instead,
$("select").find("option:selected").remove();
this works...am not sure...I new to Jquery...let me know ...
Thanx for dedication your time in helping others, I highly appreciate !
Just out of curiosity,
On line 10 on the incorrect scripts and line on 11 on the correct script you declared a variable option that isn`t being used at all, any specific reasons as to why you did that !
Ops! thanks for that.. Yes the var option was not required. I have removed it from above code. Thanks again :)
Thanks for the post - I know this is picky since it wasn't the point of the post, but i think you meant "count++" in the incorrect javascript example (instead of "count--"). Thanks again, this was exactly what i was looking for!
Thanks a lot for sharing your code! I nearly searched all morning for exactly this functionality!
Thanks a lot for sharing your code!
thanks buddy !!!!
Nice Post,
Thanks For sharing it.
Viral how could i transfer the first five options of list box , not by selecting maually from listbox.
Nice buddy!
thanks for your lovely code..cheers