Iam trying to make the select dropdown be responsive to the input box So when there's sth being enter in the input box (can be anything), the select will change to closed, If nothing is being enter in the input box, the select will be open. Any idea what's wrong with the code.Thanks in advance
$('.input').change(function() { if ($(this).val() === '') { $('.msg').text('open');} else { $('.msg').text('closed');} })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <table> <tr> <td><input type="text" class="input"> </td> <td><select class="msg" name="status[]" style="border: none" style="width: 5px" > <option value="open"> open</option> <option value="closed">closed</option> </select></td></tr> <tr> <td><input type="text" class="input"> </td> <td><select class="msg" name="status[]" style="border: none" style="width: 5px" > <option value="open"> open</option> <option value="closed">closed</option> </select></td></tr> </table>
I would suggest three changes:
Change the event binding to $('.input').on("input",function() {
- it will ensure that the dropdown changes with every keypress rather than on blur
. So the user will be able to see the changes as they type in.
Change $(".msg")
to $(this).parents("tr").find('.msg')
. The former selects all elements in DOM that have .msg
class, while the latter only affects the .msg
elements belonging to the current tr
.
Change .text('open')
to .val("open")
- this sets the value of the select
element.
$('.input').on("input",function() { if ($(this).val() === '') { $(this).parents("tr").find('.msg').val('open'); } else { $(this).parents("tr").find('.msg').val('closed'); } })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <table> <tr> <td><input type="text" class="input"> </td> <td><select class="msg" name="status[]" style="border: none" style="width: 5px"> <option value="open"> open</option> <option value="closed">closed</option> </select></td> </tr> <tr> <td><input type="text" class="input"> </td> <td><select class="msg" name="status[]" style="border: none" style="width: 5px"> <option value="open"> open</option> <option value="closed">closed</option> </select></td> </tr> </table>
As I commented on the question, use .val()
function and introduce the same name as the value to select the value you want.
Take in mind that the code you provided, if there are many .msg
dropdowns, it will change it for all of them.
Here is the snippet code.
$('.input').change(function() { if ($(this).val() === '') { $(this).parents("tr").find('.msg').val('open'); } else { $(this).parents("tr").find('.msg').val('closed'); } });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <table> <tr> <td> <input type="text" class="input"> </td> <td> <select class="msg" name="status[]" style="border: none" style="width: 5px" > <option value="open">open</option> <option value="closed">closed</option> </select> </td> </tr> <tr> <td> <input type="text" class="input"> </td> <td> <select class="msg" name="status[]" style="border: none" style="width: 5px" > <option value="open">open</option> <option value="closed">closed</option> </select> </td> </tr> </table>
Use val()
to change the value of the select
and use keyup
to trigger it if something is being pressed because if you use change
it will only trigger if the focus is not already in the input
.
$('.input').on('keyup',function() { if ($(this).val() === '' ) { $(this).parent().next().children('select').val('open'); }else { $(this).parent().next().children('select').val('closed'); } })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <table> <tr> <td><input type="text" class="input"> </td> <td><select class="msg" name="status[]" style="border: none" style="width: 5px" > <option value="open"> open</option> <option value="closed">closed</option> </select></td></tr> <tr> <td><input type="text" class="input"> </td> <td><select class="msg" name="status[]" style="border: none" style="width: 5px" > <option value="open"> open</option> <option value="closed">closed</option> </select></td></tr> </table>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.