Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

435
Vistas
validar entradas en focusout vuejs

Así que tengo una mesa y dentro de la mesa tengo tr con un bucle v-for

se ve algo como esto:

 <tr v-for="(item, index) in documentItems" :key="item.id" class="border-b border-l border-r border-black text-center"> <td>{{index + 1}}.</td> <td class=""> <div class="flex items-center itemContainer"> <textarea @focusout="checkInput('barcode',index)" v-model="item.barcode" id="" cols="15" rows="2" class="text-center item-box trigger"> </textarea> <span class="tooltip"> test123 </span> </div> </td> <td class="px-3"> <div class="flex items-center py-0.5 itemContainer"> <textarea @focusout="checkInput('product_name',index)" v-model="item.product_name" id="" cols="26" rows="2" class="text-sm text-center item-box trigger"> </textarea> <span class="tooltip" style="left: 5px;"> test123 </span> </div> </td> </tr>

ahora estoy tratando de validar la entrada al enfocarme con esta función: (tengo esta función llamada en las dos primeras áreas de texto en el código anterior)

 checkInput(name, itemIndex){ if(this.documentItems[itemIndex].name == ""){ this.errors[itemIndex].name.push("To polje je obvezno."); }; console.log(this.errors); },

el problema aquí es que cuando llamo a this.documentItems[itemIndex].name busca en el nombre de documentItems y no en el nombre del parámetro de función. Así que sale este error

 Error in v-on handler: "TypeError: Cannot read properties of undefined (reading 'name')"

¿Cómo podría arreglar esto?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Intente seguir this.documentItems[itemIndex][name] :

 new Vue({ el: '#demo', data() { return { documentItems: [{id: 1, barcode: 99, product_name: 'aaa'}], errors: [] } }, methods: { checkInput(name, itemIndex){ console.log(this.documentItems[itemIndex]) if(this.documentItems[itemIndex][name] == ""){ this.errors.push(name, "To polje je obvezno."); }; console.log(this.errors); }, } }) Vue.config.productionTip = false Vue.config.devtools = false
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="demo"> <table> <tr v-for="(item, index) in documentItems" :key="item.id" class="border-b border-l border-r border-black text-center"> <td>{{index + 1}}.</td> <td class=""> <div class="flex items-center itemContainer"> <textarea @focusout="checkInput('barcode', index)" v-model="item.barcode" id="" cols="15" rows="2" class="text-center item-box trigger"> </textarea> <span class="tooltip"> test123 </span> </div> </td> <td class="px-3"> <div class="flex items-center py-0.5 itemContainer"> <textarea @focusout="checkInput('product_name', index)" v-model="item.product_name" id="" cols="26" rows="2" class="text-sm text-center item-box trigger"> </textarea> <span class="tooltip" style="left: 5px;"> test123 </span> </div> </td> </tr> </table> </div>

over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente elimine todo [index] en su modelo v primero así:

 <tr v-for="(item, index) in documentItems" :key="item.id" class="border-b border-l border-r border-black text-center"> <td>{{index + 1}}.</td> <td class=""> <div class="flex items-center itemContainer"> <textarea @focusout="checkInput(barcode, index)" v-model="documentItems.barcode" id="" cols="15" rows="2" class="text-center item-box trigger"></textarea> <span class="tooltip"> test123 </span> </div> </td> <td class="px-3"> <div class="flex items-center py-0.5 itemContainer"> <textarea @focusout="checkInput(product_name, index)" v-model="documentItems.product_name" id="" cols="26" rows="2" class="text-sm text-center item-box trigger"></textarea> <span class="tooltip" style="left: 5px;"> test123 </span> </div> </td> </tr>

y luego actualice su script de esta manera:

 checkInput(name, itemIndex){ console.log(itemIndex); //You don't need this parameter if(this.documentItems.name == ""){ this.errors.name.push("To polje je obvezno."); }; console.log(this.errors); },

No pude probarlo en este momento, pero debería funcionar así... déjeme un breve comentario si esto funciona para usted...

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda