修改函数中的javascript变量

修改函数中的javascript变量,javascript,Javascript,我读过关于全局声明变量,然后能够在函数中修改它们的书,但事情对我来说并不顺利 这是我的密码: var selectee = "JK"; // get state selected $('select.form-control.bfh-states').change(function () { selectee = $('select option:selected').val(); // works correctly, but i need to access it outsi

我读过关于全局声明变量,然后能够在函数中修改它们的书,但事情对我来说并不顺利

这是我的密码:

var selectee = "JK";
// get state selected
$('select.form-control.bfh-states').change(function () {
    selectee = $('select option:selected').val();
    // works correctly, but i need to access it outside the function
    console.log(selectee); 
});

// output JK, should change based on a select box on the form
console.log(selectee); 

这是因为
change()
处理程序只有在从select元素触发change事件时才会执行。您正在顺序执行中使用
console.log()
语句,该语句将在触发更改处理程序之前执行

//this is correct
var selectee = "JK";

//this registers a change handler for the select element
$('select.form-control.bfh-states').change(function () {
    //but this will not execute now!!! it will get executed only when the select elements change event is fired
    selectee = $(this).val();
    console.log(selectee); // works correctly, but i need to access it outside the function
});

//this will get executed as soon as the change handler is registered not after the handler is executed
console.log(selectee);
如果希望
selectee
select
元素中选择值,则可以执行以下操作

var selectee = $('select.form-control.bfh-states').val() || "JK";
或者在处理程序连接到dom ready之后手动启动select change处理程序,如

var selectee = "JK";

$('select.form-control.bfh-states').change(function () {
    selectee = $(this).val();
    console.log(selectee); // works correctly, but i need to access it outside the function
}).change();

你的代码并不像你想象的那样工作
selectee
仅在触发select控件的更改事件后才会反映新值。事件处理程序中的代码在被调用/触发/激发之前不会执行。但是那些外部的,比如你的
console.log(selectee)
将在第一次加载代码时执行(在你的情况下,更改事件没有被调用)。

这是因为
change
处理程序是一个回调,它将在事件发生后被激发,未执行代码顺序

解决此问题的方法是从更改处理程序中执行需要selectee值的代码。首先,您不应该将其存储在全局变量中

// get state selected
$('select.form-control.bfh-states').change(function () {
    var selectee = $('select option:selected').val();
    console.log(selectee); // works correctly, but i need to access it outside the function

    // call your other code from here and pass it the current value of selectee
    myOtherFunction(selectee);

});

为了说明这一点,只有当select的值实际发生变化时,才会执行
.change()
回调函数。它将在稍后的某个时候被调用。因此,若要稍后使用selectee的值,您需要在更改新值的同时执行需要该值的代码。

另一种方法是将所选值传递到新函数中,从而在该函数中访问它(而不是全局访问)。试试这个:

 selectee = "JK";
 // get state selected
$('select.form-control.bfh-states').change(function () {

selectee = $('select option:selected').val();
// works correctly, but i need to access it outside the function
mynewfunc(selectee);

});
function mynewfunc(){
alert(selectee);
}
注意:一旦触发更改,在新函数
mynewfunc
之外无法访问变量
selectee


您的代码无法正常工作。只有在触发select控件的更改事件后,selectee才会反映新值。到那时,console.log(selectee)必须已经执行。定义“一切都不正常”。假设您在更改所选选项后获得了selectee的值?
$('select option:selected').val()
可以是
这个.value