'Unable to set property 'selected' using JS
I have a series of CheckBox elements whose Id matches the values of tags within the same form.
My intention is that, when I Check a checkbox, the tag gets selected.
When I uncheck the checkbox, the tag gets deselected.
This implementation is for a select tag with multi-select.
JS code
function setPermissions(val) {
var checkBox = document.getElementById(String(val));
if (checkBox.checked) {
$("#permissions option[value=" + val + "]").prop("selected", false);
}
else {
console.log("!checked", val);
$("#permissions option[value=" + val + "]").prop('selected', true);
//$("#permissions option[value=" + val + "]").attr('selected', 'selected');
}
}
Checkbox
@foreach (var p in ViewBag.Permissions)
{
<li class="form-control">
<input class="isCheckbox" style="vertical-align:middle" type="checkbox" value="@p.id" id="@p.id" onclick="setPermissions(@p.id)">
<label for="@p.id">
@p.name
</label>
</li>
}
Select
<select id="permissions">
@foreach (var item in ViewBag.Permissions)
{
<option value="@item.id"></option>
}
Solution 1:[1]
Use onchange instead of onclick
Solution 2:[2]
Not 100% sure what you want it to do, but this might solve your problems
function setPermissions(obj) {
$("#permissions option[value=" + obj.value + "]").prop('selected', obj.checked);
}
Demo
function setPermissions(obj) {
$("#permissions option[value=" + obj.value + "]").prop('selected', obj.checked);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li class="form-control">
<input class="isCheckbox" style="vertical-align:middle" type="checkbox" value="test1" id="test1" onclick="setPermissions(this)">
<label for="test1">
test1
</label>
</li>
<li class="form-control">
<input class="isCheckbox" style="vertical-align:middle" type="checkbox" value="test2" id="test2" onclick="setPermissions(this)">
<label for="test2">
test2
</label>
</li>
<li class="form-control">
<input class="isCheckbox" style="vertical-align:middle" type="checkbox" value="test3" id="test3" onclick="setPermissions(this)">
<label for="test3">
test3
</label>
</li>
</ul>
<select id="permissions" multiple>
<option value="test1">test1</option>
<option value="test2">test2</option>
<option value="test3">test3</option>
</select>
Solution 3:[3]
When checkBox.checked is true,you should use prop('selected', true),and when it is false,use prop('selected', false).That's why your js does not work.
function setPermissions(val) {
var checkBox = document.getElementById(String(val));
if (checkBox.checked) {
$("#permissions option[value=" + val + "]").prop("selected", true);
}
else {
console.log("!checked", val);
$("#permissions option[value=" + val + "]").prop('selected', false);
//$("#permissions option[value=" + val + "]").attr('selected', 'selected');
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | MaxCodes |
| Solution 2 | |
| Solution 3 | Yiyi You |
