$(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']); } }); });