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

105
Vistas
Las casillas de verificación Svelte de repente no se pueden marcar

A continuación se muestra el código para reproducir mi problema (Svelte 3.0.0).

Pasos de reproducción:

  1. Haga clic en una casilla de verificación. (se comporta normalmente)
  2. Escriba algunos caracteres en el cuadro de búsqueda.
  3. Elimine los caracteres que acaba de escribir.
  4. Vuelva a hacer clic en una casilla de verificación. Tenga en cuenta que ahora no tiene ningún efecto. La casilla de verificación permanece en blanco.

EDITAR : parece estar relacionado con esta línea:

bind:group={selectedVars[schemaVar.name].lts}

Si codifico eso para:

bind:group={selectedVars['bar'].lts}

Entonces funciona bien.

¿Alguna idea de por qué el filtro rompe las casillas de verificación?

 <script> let schema = { name: "bar", vars: [{ name: "X" }], }; $: availableLTs = ["aaa", "bbb", "ccc", "abc"]; function matchesSearch(searchString, text) { let query = searchString; console.log("query is", query); if (!query) return true; return text.includes(query); } let selectedChart = 'bar'; let selectedVars = {X: { lts: [] }}; $: schemaVars = schema.vars; let searchString = ""; </script> <main> {#each schemaVars as schemaVar} <h6> {schemaVar.name} <input type="text" bind:value={searchString} placeholder="Search..." /> </h6> {#each availableLTs as ele} {#if matchesSearch(searchString, ele)} <div class="form-check"> <label> <input type="checkbox" class="form-check-input" bind:group={selectedVars[schemaVar.name].lts} value={ele} /> {ele} </label> </div> {/if} {/each} {/each} </main>
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puedes resolver este problema así

En App.Svelte

 <script> import Checkbox from './Checkbox.svelte'; let schema = { name: "bar", vars: [{ name: "X" }], }; $: availableLTs = ["aaa", "bbb", "ccc", "ABC"]; $: matchesSearch = availableLTs.filter((elem) =>{ return elem.includes(searchString); }) let selectedChart = 'bar'; let selectedVars = {X: { lts: [] }}; $: console.log(selectedVars) $: schemaVars = schema.vars; let searchString = ""; </script> <main> {#each schemaVars as {name}} <h6> {name} <input type="text" bind:value={searchString} placeholder="Search..." /> </h6> <Checkbox bind:value={selectedVars} {name} {matchesSearch}/> {/each} </main>

En Checkbox.Svelte

 <script> export let value, name, matchesSearch; </script> {#each matchesSearch as ele} <div class="form-check"> <label> <input type="checkbox" class="form-check-input" bind:group={value[name].lts} value={ele} /> {ele} </label> </div> {/each}

Puedes comprobarlo en este repl

about 4 years ago · Juan Pablo Isaza Denunciar

0

Parece que el problema tiene algo que ver con cada bucle anidado

 {#each schemaVars as schemaVar} ... {#each availableLTs as ele} ...//Checkbox {/each} {/each}

que se puede resolver envolviendo el bucle interno dentro de un componente.

La respuesta anterior casi resolvió el problema, pero falta una cosa importante: cada bucle dentro del componente no es un "bloque con clave" ->

  1. seleccione la tercera casilla de verificación 'ccc'
  2. filtro para 'c'
  3. -> 'ccc' se mueve a la primera posición y ya no se marca

(alternativamente seleccione 'aaa' y filtre por 'b'...)

Esto se puede resolver agregando el texto de la etiqueta como clave/id (suponiendo que las etiquetas de las casillas de verificación sean únicas) ->

 {#each filteredLTs as ele (ele)} ... {/each}

Dado que el problema no era la forma en que se configuró la variable (...selectedVars[schemaVar.name].lts}), intentaría mantener la lógica dentro del componente general y establecer las variables específicamente dentro de la etiqueta del componente dentro de la aplicación. esbelto -> el componente se mantiene universal y se puede reutilizar fácilmente Ejemplo en este REPL

[Aplicación pequeña]
 <script> import Checkboxes from './Checkboxes.svelte' let schema = { name: "bar", vars: [{ name: "X" }], }; let allLTs = ["aaa", "bbb", "ccc", "abc"]; let searchString = ""; $: filteredLTs = allLTs.filter(lt => lt.includes(searchString)) let selectedVars = {X: { lts: [] }}; $: console.log(selectedVars.X.lts) </script> <main> {#each schema.vars as schemaVar} <h6> {schemaVar.name} <input type="text" bind:value={searchString} placeholder="Search..." /> </h6> <div class="form-check"> <Checkboxes checkboxes={filteredLTs} bind:checked={selectedVars[schemaVar.name].lts}/> </div> {/each} </main>
[Casillas de verificación.svelte]
 <script> export let checkboxes, checked </script> {#each checkboxes as checkbox (checkbox)} <label> <input type="checkbox" class="form-check-input" bind:group={checked} value={checkbox} /> {checkbox} </label> {/each}
about 4 years ago · Juan Pablo Isaza 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