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

103
Views
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 answers
Answer question

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 Report

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