0

我开始怀疑 jquery 是否易于使用和灵活。我有这个:

var prodata=[];
var request = $.get("proDB.txt", function(data) {
    var lines=data.split(/\n/);
    var numberofmodels=lines.length-2;
    //var prodata=[];
    var i;
    prodata.push(0);
    var fieldnames=lines[0].split(/\t/);
    for (i = 1; i < lines.length-1; ++i) {
        var fields=lines[i].split(/\t/);
        prodata.push(i);            
        var j;
        prodata[i]={};
        for (j = 0; j < fields.length; ++j) {
            //prodata[i][fieldnames[j]]=fields[j];
            var str=fieldnames[j];
            prodata[i][str]=fields[j];

        }
    }

    //FILL THE DROPDOWN LIST
    var options = '';
    for (i = 1; i < lines.length-1; ++i) {
        if (prodata[i]['name'].indexOf("elly") >= 0) {
            var iselected = i;
        }
        options += '<option label="bla" value="' + prodata[i]['id'] + '">' + prodata[i]['name']+', '+prodata[i]['brand']+', '+prodata[i]['model']+'</option>';
    }
    $("#userchosenpromodel").html(options);
    //SELECT DEFAULT OPTION
    $('#userchosenpromodel option[value="' + prodata[iselected]['id'] + '"]').attr("selected", "selected");
}, 'text'); //$.get

在这样定义之后,我想proId在我的代码中使用 , 较低的:

//SUBMIT FORM
$('#submitbutton').click(function(e) {
    e.preventDefault(); 
    request.done(function(){
        proId=$('#userchosenpromodel option[selected="selected"]').val();
        proId=parseInt(proId);
        computeUserDimensions(prodata[proId]);
    });
});
    console.log(proId);

如何?

同样的问题prodata......我有request.done我无法摆脱的问题

谢谢

4

2 回答 2

4

jQuery 没有问题,但基于异步/事件的逻辑。

不能同步使用异步函数的返回。您必须在回调或从回调调用的函数中使用结果:

request.done(function(){
    var proId=$('#userchosenpromodel option[selected="selected"]').val();
    console.log(proId);
});
于 2013-04-05T15:01:08.243 回答
0

为什么不这样做:

request.done(function(){
    proId=$('#userchosenpromodel option[selected="selected"]').val();
    doSomethingWithProId();
});

function doSomethingWithProId(){
    console.log(proId);
}

或者所以它不需要是全局的

request.done(function(){
    var proId=$('#userchosenpromodel option[selected="selected"]').val();
    doSomethingWithProId(proId);
});

function doSomethingWithProId(proId){
    console.log(proId);
}

我认为的第二个解决方案更好。无论您需要使用 proId 做什么,都可以构建您的函数来传递该数据。这样你就不需要污染全局范围。听起来你需要更好地理解 JS。

于 2013-04-05T15:02:19.753 回答