我正在使用Jquery,我确实创建了一个变量,我返回一个json对象。这个函数等待两个参数,第一个是源,第二个是全局变量,我希望函数保存它。但是当我想从全局变量中获取值时,这是空的。
这是我的代码
$(function(){
var selectedSuggestion1 = null;
var selectedSuggestion2 = null;
loadSuggestions(responseObject);
$('#btnShow').click(function(){
var drp = $('#range1').data('daterangepicker');
console.log(selectedSuggestion1);
var params = {};
params['id'] = selectedSuggestion1.id;
params['type'] = selectedSuggestion1.type;
params['startDate'] = drp.starDate.format('YYYY-MM-DD');
params['endDate'] = drp.endDate.format('YYYY-MM-DD');
console.log(params);
});
function loadSuggestions(comparative){
var arrCustomerSug = new Array();
$.each(comparative.lsCustomersSug, function(i, e){
arrCustomerSug.push({
type: 1,
value: e.name,
id: e.id
});
});
var cfgAutoComplete = function(source, variable){
var jsonResponse = {
source: source,
select: function(event, ui){
variable = ui.item;
},
search: function(event, ui){},
messages:{
noResults: '',
results: function(){}
}
};
return jsonResponse;
}
$('#inpCustomerSuggestion1').autocomplete(cfgAutoComplete(arrCustomerSug, selectedSuggestion1));
正好在“cfgAutoComplete”功能中。我将全局变量“selectedSuggestion1”传递给函数,当select函数处于活动状态时,必须将值保存在我的变量上。但不是吗。
在点击功能中,我尝试获取值,但这个值为空。 如果我按原样放置全局变量,我就会获得价值。但我需要这是动态的。
答案 0 :(得分:0)
在此函数调用中
cfgAutoComplete(arrCustomerSug, selectedSuggestion1)
selectedSuggestion1
是一个字符串。它的值传递给cfgAutoComplete,而不是对全局变量的引用。因此,在您的函数中,更新variable
不会像您想要的那样更新全局变量。
快速而肮脏的修复,将全局输入的名称作为字符串传递:
cfgAutoComplete(arrCustomerSug, "selectedSuggestion1")
然后在cfgAutoComplete中,通过window
对象找到并更新所需的全局变量
var cfgAutoComplete = function(source, globalName){
var jsonResponse = {
source: source,
select: function(event, ui){
window[globalName] = ui.item;
...