繁体   English   中英

未捕获的类型错误:无法读取未定义的属性(读取“indexOf”)

[英]Uncaught TypeError: Cannot read properties of undefined (reading 'indexOf')

我正在选择 area_enInfantry 的所有子 div 并循环调整某些子 div 的文本。 cardArray 是一个全局常量,myId 在父 function 中定义。

未捕获的类型错误:无法读取未定义的属性(读取“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 元素,我应该将它们包装在 $() 中,所以我确实这样做了 - 将两个变量都更改为 $(element)[a].attr( 'title') 但现在我得到 Uncaught TypeError: Cannot read properties of undefined (reading 'indexOf') ,似乎将错误移至下一行。

我在这里做错了什么?

这里有几个问题。 首先,变量element包含元素 object,而不是 jQuery object,因此没有可用的attr()方法。

其次,一旦你纠正了这一点,第一个div上的attr('title')就没有设置,所以undefined 因此你会得到一个错误,因为你在一个空值上调用indexOf() 如果 null,您可以通过将值合并为空字符串来解决此问题。

另请注意,我假设您要调用doStuff() function,因此需要在末尾添加() ,最好尽可能使用prop()而不是attr()

话虽如此,试试这个:

 // 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM