0

JSFiddle:http: //jsfiddle.net/veksen/7TRgE/1/

如果我从函数内部调用变量值,它就可以工作。但是,如果我在函数之外调用它,则不会。

我觉得它与改变有关,因为它首先分配好,但不会改变。

var diff_res = { norm:0, nm:-40, hell:-100 };
var difficulty = "hell"; 
$("select").change(function () {
    difficulty = $("select option:selected").val();
    $(".inside").text(diff_res[difficulty]);
})
.change();

var char_fr = 30;
char_fr += diff_res[difficulty];

$(".outside").text(diff_res[difficulty]);

​</p>

4

2 回答 2

1

.inside有一个事件说:“如果有人改变我 [...]”。.outisde没有事件。所以:

$(".outside").text(diff_res[difficulty]);

只会执行一次。

http://jsfiddle.net/7TRgE/2/

选择的选项是:“nm”,默认值为“-40”。

于 2012-11-11T02:46:40.320 回答
1

更新:

通过重新执行,我的意思是这样的:

$(document).ready(function () {
    'use strict';
    var diff_res = {
            norm: 0,
            nm: -40,
            hell: -100
        },
        difficulty = "hell",
        char_fr = 30,
        changeOutside = function changeOutside() {
            $(".outside").text(diff_res[difficulty]);
        };
    $("select").change(function () {
        difficulty = $("select option:selected").val();
        $(".inside").text(diff_res[difficulty]);
        changeOutside();
    }).change();
    char_fr += diff_res[difficulty];
});

关键$(".outside").text(diff_res[difficulty]);是它只在加载 DOM 时执行一次,这就是text()最初设置为-100. 要.outside再次更改,您需要重新运行$(".outside").text(diff_res[difficulty]);

原来的:

你的问题是:

$(".outside").text(diff_res[difficulty]);

在函数中只执行一次$(document).ready()。如果您希望它更频繁地更改,则需要在change处理程序中重新执行它。

于 2012-11-11T02:51:51.120 回答