JQuery - 在另一个函数中需要的函数中访问VAR?

时间:2010-01-30 11:03:56

标签: javascript jquery variables function

好的,在我的html / js中,我有一个基于用户之前选择更新的表单。在最后一个阶段,我有一个选择菜单,用户将选择他们的城市。我已将所选项目的值存储在我的选项列表中,其ID为#myCity,如下所示。

('#myCity').change(function(){
    var CityValue = $("#myCity").val();
});

设置该值后,我的表单会显示提交按钮

<input type="submit" id="go" value="Submit" onclick="getweather()" />

这是我开始有点麻烦的地方。在我的getweather()函数中,我希望能够从上面获取var CityValue并将其附加到另一个var,以便我可以加载特定的页面。

function getweather(){
                    var CityValue;
                    var to_load = 'getweather.php?p='+ CityValue +'.html';

                    $('#weather').empty().append(to_load);


                 }

但在我的测试中,我不认为我的getweather()函数能够读取我想要的var。有人可以提出解决方案吗?

4 个答案:

答案 0 :(得分:2)

好吧,你指定的第一个函数(onchange的事件处理程序)现在没有做任何事情。您可以删除它并编辑第二个函数,如下所示:

function getweather(){
    var CityValue = $("#myCity").val();

    var to_load = 'getweather.php?p='+ CityValue +'.html';

    $('#weather').empty().append(to_load);
}

答案 1 :(得分:0)

您仅在无法从外部访问的函数范围内声明了CityValue。要么全局声明你的变量:

var CityValue;
$('#myCity').change(function(){
    CityValue = $("#myCity").val();
});
function getweather() {
    var to_load = 'getweather.php?p='+ encodeURIComponent(CityValue) +'.html';
    $('#weather').empty().append(to_load);
}

或者只需在$("#myCity").val()函数中调用getweather

function getweather() {
    var to_load = 'getweather.php?p='+ encodeURIComponent($("#myCity").val()) +'.html';
    $('#weather').empty().append(to_load);
}

答案 2 :(得分:0)

  

好吧,你指定的第一个函数(onchange的事件处理程序)现在没有做任何事情。您可以删除它并编辑第二个函数,如下所示:

然后,您可以将此函数调用添加到更改事件。

function getweather(){
    var CityValue = $("#myCity").val();

    var to_load = 'getweather.php?p='+ CityValue +'.html';

    $('#weather').empty().append(to_load);
}

$('#myCity').change(getweather);

答案 3 :(得分:0)

问题的更优雅答案是使用jQuery data API。这允许您在对象中存储任意数据,而不是声明变量,以一种漂亮的OOP方式保存所有内容。所以,做你想做的就意味着存储这样的值:

$('#myCity').change(function(){
   $("#myCity").data("CityValue", $("#myCity").val());
}); 

这样你就可以像这样检索它:

function getweather(){
   var to_load = 'getweather.php?p='+ $("#myCity").data("CityValue") +'.html';
   $('#weather').empty().append(to_load);
}