$(document).ready(function () { clearSelectionLabel = '(no selection)'; function changeSelectedValue(obj, pk, text, update_url) { //Pass in JQuery object and new parameters //console.log('Changing selected value'); obj.find('option').remove(); //Remove all the available options obj.append( //Add the new option $("") .attr("value", pk) .text(text) .data('update_url', update_url) ); obj.selectpicker('render'); //Re-render the UI obj.selectpicker('refresh'); //Re-render the UI obj.selectpicker('val', pk); //Set the new value to be selected obj.change(); //Trigger the change function manually } function refreshUpdateHref(obj) { //console.log('Refreshing Update URL'); targetObject = $('#' + obj.attr('id') + '-update'); update_url = $('option:selected', obj).data('update_url'); if (update_url == "") { //Probably "clear selection" has been chosen // console.log('Trying to disable'); targetObject.attr('disabled', true); } else { targetObject.attr('href', update_url); targetObject.attr('disabled', false); } } $(".selectpicker").each(function () { var options = { ajax: { url: $(this).data('sourceurl'), type: 'GET', dataType: 'json', // Use "{{{q}}}" as a placeholder and Ajax Bootstrap Select will // automatically replace it with the value of the search query. data: { term: '{{{q}}}' } }, locale: { emptyTitle: '' }, clearOnEmpty: false, //log: 3, preprocessData: function (data) { var i, l = data.length, array = []; array.push({ text: clearSelectionLabel, value: '', data: { update_url: '', subtext: '' } }); if (l) { for (i = 0; i < l; i++) { array.push($.extend(true, data[i], { text: data[i]['label'], value: data[i]['pk'], data: { update_url: data[i]['update'], subtext: '' } })); } } return array; } }; $(this).prepend($("") .attr("value", '') .text(clearSelectionLabel) .data('update_url', '')); //Add "clear selection" option $(this).selectpicker().ajaxSelectPicker(options); //Initiaise selectPicker $(this).change(function () { //on change, update the edit button href // console.log('Selectbox Changed'); refreshUpdateHref($(this)); }); refreshUpdateHref($(this)); //Ensure href is correct at the beginning }); //When update/edit modal box submitted $('#modal').on('hide.bs.modal', function (e) { if (modaltarget != undefined && modalobject != "") { //Update the selector with new values changeSelectedValue($(modaltarget), modalobject[0]['pk'], modalobject[0]['fields']['name'], modalobject[0]['update_url']); } }); });