I have a select box, and I'd like to add a confirm before changing it to a specific option. Example:
<select name="select"> <option value="foo" selected="selected">foo</option> <option value="bar">bar</option> </select>
$('select').change(function() { var selected = $(this).val(); if (selected == 'bar') { if (!confirm('Are you sure?')) { // set back to previously selected option } } });
I'm thinking about adding a hidden input field and update its value every time the select is changed. That way I can retrieve the previous value in the change
function. Example:
<input type="hidden" name="current" value="foo" />
$('select').change(function() { var selected = $(this).val(); var current = $('input[name=current]').val(); if (selected == 'bar') { if (!confirm('Are you sure?')) { $(this).val(current); return false; } } $('input[name=current]').val(selected); });
Is there an easier/better way to accomplish this?
Approach: Select the option from select which needs to remove. Use JQuery remove() method to remove the option from the HTML document.
Explanation: If we want to remove all items from dropdown except the first item then we can use $('#ddlItems option:not(:first)'). remove(); Here we have excluded first item from being deleted. If we want to remove all items from dropdown except the last item then we can use $('#ddlItems option:not(:last)').
Rather than using a global variable (evil!) or a hidden element (abuse of the DOM) you can use the $.data
feature:
$('select').change(function() { var selected = $(this).val(); if (selected == 'bar') { if (!confirm('Are you sure?')) { $(this).val($.data(this, 'current')); return false; } } $.data(this, 'current', $(this).val()); });
Hope this would help.
$( YOUR_SELECT_ELEMENT ).on({ "ready": function (e) { $(this).attr("readonly",true); }, "focus": function (e) { $(this).data( { choice: $(this).val() } ); }, "change": function (e) { if ( ! confirm( "Change selected option, proceed?" ) ){ $(this).val( $(this).data('choice') ); return false; } else { $(this).attr("readonly",false); return true; } } });
I'm not sure 'return false' is effective for remove the attribute 'readonly'.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With