将javascript变量传递给函数我得到一个空值

时间:2016-06-02 21:16:41

标签: javascript jquery

我正在使用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函数处于活动状态时,必须将值保存在我的变量上。但不是吗。

在点击功能中,我尝试获取值,但这个值为空。 如果我按原样放置全局变量,我就会获得价值。但我需要这是动态的。

1 个答案:

答案 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;
                    ...