Created
August 11, 2022 07:29
-
-
Save gridphp/472615a0fbd06782fd7ba8f7a8bbf6c3 to your computer and use it in GitHub Desktop.
FX Temp - 2.8.1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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