Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

106
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda