Skip to content

Instantly share code, notes, and snippets.

@gridphp
Created August 11, 2022 07:29
Show Gist options
  • Save gridphp/472615a0fbd06782fd7ba8f7a8bbf6c3 to your computer and use it in GitHub Desktop.
Save gridphp/472615a0fbd06782fd7ba8f7a8bbf6c3 to your computer and use it in GitHub Desktop.
FX Temp - 2.8.1
fx_get_dropdown = function (o,field,for_search_bar)
{
// dont process hidden elements, removed for select2 dependent
// if (!jQuery(o).is(":visible"))
// return;
if (for_search_bar)
{
// for inline edit and dialog edit
var sel = '.ui-search-toolbar select[name='+field+']';
}
else
{
// for inline edit and dialog edit
var sel = 'select[name='+field+'].editable,select[name='+field+'].FormElement,.edit-cell select[name='+field+']';
}
var request = {};
request['value'] = jQuery(o).val();
if (o.event == 'onload')
request['event'] = 'onload';
// for dialog, else inline
if (jQuery(o).closest('.FormGrid').length)
grid_id = jQuery(o).closest('.FormGrid').attr('id').replace('FrmGrid_','');
else
grid_id = jQuery(o).closest('.ui-jqgrid-btable').attr('id');
grid = jQuery('#'+grid_id);
// get editable and non-editable data, both
var row = grid.getRowData(jQuery(o).closest('tr').attr('id'));
for (var a in row)
request[a] = row[a];
// override html data (from above) with content of editable fields
jQuery(".editable").each(function(){ request[jQuery(this).attr('name')] = jQuery(this).val(); });
// for dialogs, load param from visible form selection
jQuery("#FrmGrid_"+grid_id+":visible .FormElement").each(function(){ request[jQuery(this).attr('id')] = jQuery(this).val(); });
// add source element's value
request[jQuery(o).attr('name')] = jQuery(o).val();
if (for_search_bar)
jQuery(".ui-search-input input, .ui-search-input select").each(function(){ request[jQuery(this).attr('name')] = jQuery(this).val(); });
// dont send 'act' column data
delete(request['act']);
delete(request['xs_view_dots']);
delete(request[field]);
// to detect internal ajax call
request['nd'] = '12345';
if (o.event == 'onload')
request['src'] = field;
else
request['src'] = jQuery(o).attr('name');
// if callback is set for dropdown
if (field instanceof Function)
request['return'] = "json";
else
{
//preserve last value
var last_val = jQuery(sel).val();
// jQuery(sel).css('min-width',"70%");
request['return'] = "option";
request['target'] = field;
// jQuery(sel).prepend("<option value='-1' selected='selected' disabled='disabled' style='display:none'>Loading...</option>");
}
jQuery.ajax({
url: grid.getGridParam('url'),
dataType: 'html',
data: request,
type: 'POST',
error: function(res, status) {
alert(res.status+' : '+res.statusText+'. Status: '+status);
},
success: function( data ) {
if (for_search_bar == 1)
{
data = "<option value=\"\">-</option>" + data;
var old_select_content = jQuery('select[name='+field+']').html();
jQuery('select[name='+field+']').html(data);
// only refresh if content is different
if (data != old_select_content)
{
// invoke change event for dependents (slowing with extra call to adjust result)
jQuery('select[name='+field+']').change();
}
// reload multiselect filter if exist
try
{
jQuery('select[name='+field+']').multiselect("refresh");
jQuery('select[name='+field+']').siblings('button.ui-multiselect').css({
width: "98%"
});
}
catch(err){};
}
else
{
// if callback is defined for dropdown, call it
if (field instanceof Function)
{
field(data);
}
else
{
if (data.length)
jQuery(sel).html(data);
else
jQuery(sel).html("<option value='' selected='selected'>Select...</option>");
// if not select2
if (!jQuery(sel).data('select2') && !jQuery(sel).attr('skipempty'))
{
jQuery(sel).children("option[value='']").remove();
jQuery(sel).prepend("<option value='' selected='selected'></option>");
}
// for multiple option dropdown, select last values
if(typeof(last_val) == "object" && last_val != null)
{
last_val = last_val.toString().split(",");
jQuery(sel).val(last_val);
}
else
{
// reselect last option if exist, in new dropdown data
if (jQuery(sel).children('option[value="'+last_val+'"]').length != 0)
jQuery(sel).val(last_val);
}
// invoke change event for dependents
jQuery(sel).change();
// if select2, reset field as blank for new options
if (jQuery(sel).data('select2'))
{
jQuery(sel).select2("val", request[field] || "");
}
// load (if any) new values in dropdown k:v values
// if (o.event == 'onload')
{
// add new dropdown values in column
var s = grid.getColProp(field).editoptions.value;
var rec = s.split(";");
var vals = new Array();
for (var x in rec)
{
tmp = rec[x].split(":");
vals[tmp[0]] = tmp[1];
}
var arr = new Array();
jQuery('select[name='+field+'] option').each(function()
{
vals[jQuery(this).val()] = jQuery(this).text();
});
s = '';
for(var x in vals)
s += x+":"+vals[x]+";";
// remove last ;
s = s.substring(0,s.length-1);
grid.setColProp(field,{editoptions:{value:s}});
// reselect dropdown value for cellEdit mode, rest already working
if (grid.getGridParam('cellEdit'))
{
val = request['value'] || request[request['src']];
jQuery('.ui-jqgrid-btable select[name='+field+']').val(val);
}
}
}
}
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment