Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

185
Views
TypeError no capturado: no se pueden leer las propiedades de undefined (leyendo 'indexOf')

Estoy seleccionando todos los divs secundarios de area_enInfantry y recorriéndolos para ajustar el texto de algunos. cardArray es una constante global y myId se define dentro de la función principal.

TypeError no capturado: no se pueden leer las propiedades de undefined (leyendo '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>

Leí en esta publicación que puede deberse a que los contenidos del campo/elemento pueden ser elementos DOM y que debería envolverlos en $(), así que hice exactamente eso: cambiar ambas variables a $(elemento)[a].attr( 'título') pero ahora obtengo Uncaught TypeError: no se pueden leer las propiedades de undefined (leyendo 'indexOf') en su lugar, aparentemente moviendo el error a la siguiente línea.

¿Qué estoy haciendo mal aquí?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Hay un par de problemas aquí. En primer lugar, el element variable contiene un objeto Element, no un objeto jQuery, por lo que no hay un método attr() disponible.

En segundo lugar, una vez que corrige eso, attr('title') en el primer div no está configurado, por lo que no está undefined . Por lo tanto, obtendrá un error porque está llamando a indexOf() en un valor vacío. Puede resolver esto fusionando el valor en una cadena vacía si es nulo.

También tenga en cuenta que asumiría que desea invocar la función doStuff() , por lo que debe agregar () al final y es una mejor práctica usar prop() sobre attr() donde sea posible.

Dicho esto, prueba esto:

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

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!