代码从内联更改为更改功能后grep中断

时间:2016-03-16 23:25:12

标签: javascript jquery arrays object grep

我认为我改变了范围问题。

我有一个选择框,可以为更改事件触发内联代码。

我删除了内联代码并改为创建了一个onchange函数。在我这样做之后,grep似乎打破了。它现在没有找到对象的属性。

旧代码 - 剥离

function assignHiddenValue(o,s,h,n) {
...
d = oCombListData;
var eID = jQuery(this).val();
var edata = jQuery.grep(d, function (e) { 
                return e.idpower_effects_list === eID 
                });
            console.log('edata = ');
            console.log(edata);
            var ecost = edata[0].effect_cost;
}

工作得很好。

新代码

jQuery("select[name='slctEffect']").change(function ($) {
...
d = oCombListData;
var eID = jQuery(this).val();
var edata = jQuery.grep(d, function (e) { 
                return e.idpower_effects_list === eID 
                });
            console.log('edata = ');
            console.log(edata);
            var ecost = edata[0].effect_cost;
});

现在我收到了这个错误。

Uncaught TypeError: Cannot read property 'effect_cost' of undefined

是什么给出的? d(对象数组)和eID(int)在控制台中显示数据。但是现在grep说它无法找到对象的属性。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

在你的"内联"代码我假设您正在做这样的事情:

<select name="slctEffect" onchange="assignHiddenValue(...)">
    ...
</select>

当你的assignHiddenValue函数中的这一行var eID = jQuery(this).val();被调用时,&#34;这个&#34;将是窗口。

在&#34; onchange&#34;在调用var eID = jQuery(this).val();时,从新代码中运行,&#34;此&#34;将是选择