0

我有一个 TaffyDB,其中包含 RPG 项目的配方。每个项目都有一个布尔值来声明它是否在游戏中“混合”。

var recipes = TAFFY([
    {id:0, name:'Potion', mixed:false},
    {id:1, name:'Hi-Potion', mixed:false},
    {id:2, name:'Mega-Potion', mixed:false}
]);

生成一个 HTML 表格,每个配方都有一个表示“混合”变量的复选框。每个复选框的value=X位置X对应于数据库中项目的 ID。我检测到复选框更改并尝试使用以下内容更新数据:

$('input:checkbox').on('change', function() {
    var val = $(this).val();
    var checked = $(this).is(':checked');

    recipes({id:val}).update({mixed:checked});

    alert('Updated recipe id: ' + val + 
      '\nRecipe: ' + recipes({id:val}).first().name +
      '\nValue should be ' + checked +
      '\nValue is ' + recipes({id:val}).first().mixed);
}

当尝试使用recipes({id:val}).first().nameand获取变量时.mixedundefined总是返回。更新调用也不会更改值。但是,如果我将所有查询更改为recipes({id:0}),它可以正常工作,但它只报告和更新第一个复选框。

据我所知,它不喜欢 javascript 变量val,并且checked在执行诸如 之类的查询时recipes({id:val}),但对文字0.

JSFiddle:http: //jsfiddle.net/w6g6W/12/

4

1 回答 1

1

事实证明,它$(this).val()返回的是一个字符串,而不是一个 int。

替换var val = $(this).val();var val = parseInt($(this).val());

于 2014-08-07T01:06:58.570 回答