我正在选择area_enninFantry的所有子div,并循环调整某些子div的文本。cardArray是一个全局常量,myId在父函数中定义。
未捕获的TypeError:无法读取未定义的属性(读取“getAttribute”)
var field = $("#area_en" + cardArray[myId]['type']).find("div");
field.each(function(a, element) {
console.log("cC type:" + cardArray[myId]['type'] + "- index:" + a + " title: " + element[a].attr('title'));
if (element[a].attr("title").indexOf("player") < 0) { // check this card isn't special player card
doStuff;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="area_enInfantry">
<div id="info_enInfantryScore" class="info_Score">-1</div>
<div class="encardContainer" title="barricade">-1</div>
<div class="encardContainer" title="spy">2</div>
</div>
我在这篇文章中读到,这可能是因为字段/元素的内容可能是DOM元素,我应该用$()包装它们,所以我确实这样做了——将两个变量都更改为$(元素)[a]. attr(“标题”),但现在我被发现了TypeError:无法读取未定义的属性(读取'indexOf'),似乎将错误移动到下一行。
我到底做错了什么?
这里有几个问题。首先,变量element
包含一个element对象,而不是jQuery对象,因此没有可用的attr()
方法。
其次,一旦你纠正了这一点,第一个div上的attr('title')
没有设置,所以未定义
。因此,您会得到一个错误,因为您在一个空值上调用indexOf()
。如果为null,您可以通过将值合并到空字符串来解决这个问题。
还要注意的是,我假设您希望调用doStuff()
函数,因此需要在末尾添加()
,最好在attr()
上使用prop()
。
话虽如此,请尝试以下方法:
// mock data
let myId = 'foo';
let cardArray = { foo: { type: 'Infantry' } }
let doStuff = () => console.log('do stuff...');
var $field = $("#area_en" + cardArray[myId]['type']).find("div");
$field.each(function(i, element) {
let $el = $(element);
console.log("cC type:" + cardArray[myId]['type'] + "- index:" + i + " title: " + $el.prop('title'));
if (($el.prop("title") || '').indexOf("player") < 0) { // check this card isn't special player card
doStuff();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="area_enInfantry">
<div id="info_enInfantryScore" class="info_Score">-1</div>
<div class="encardContainer" title="barricade">-1</div>
<div class="encardContainer" title="spy">2</div>
</div>
我遇到了一个有趣的问题,这使我感到困惑。我正在执行一个正确返回数据的Sharepoint RestAPI调用,当我在数据上运行for循环时,它生成html,但仍然抛出我用作标题的错误。代码如下。如果我记录每个循环,它将返回值。HTML也可以很好地工作。问题是错误仍然会出现。
我使用的是最新版本的react路由器(版本^3.0.0)。 我使用ES5编写了以下路由: : 在另一个名为
我的代码: 错误: 未处理PromisejectionWarning:TypeError:无法读取未定义的未处理PromisejectionWarning:未处理的promise拒绝的属性“forEach”。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。(拒绝id:1)(节点:7188)[DEP0018]弃用警告:未处理的promise
我想有一个无限滚动的项目列表,我正在使用这个包https://github.com/CassetteRocks/react-infinite-scroller但是在留档中没有提到抓取功能的样子。 在我的代码中,它是这样的: 完整消息错误: 未捕获(promise中)类型错误:无法读取评估时未定义的属性“companys”(traineships.component.js:71) 编辑:(我不再有错
我正在使用NVD3库根据Rails控制器中生成的数据制作简单的折线图。我用来在Rails中生成数据的代码是: 然后,在我看来,我有以下JS代码: 图表正确呈现,但当我尝试将鼠标悬停在数据点上以显示工具提示时,会出现错误“Uncaught TypeError:无法读取未定义的属性“x”
我想在我的角度项目中添加钢系列。我有createad html-compass组件,但我收到了这个错误: _services错误类型错误:无法读取未定义的属性(读取主题)在ProjectService…/app/Subject.js:53/_next(node_modules)在_esm5__tryOrUnsub[EventEmitter.push.](node_modules)在_esm5…/c