Como definir autocomplete = “ off ” na forma relâmpago

O problema

Estou tentando definir o atributo HTML auto-complete="off" em um elemento de entrada com a classe slds-input. Por alguma razão, o modelo sempre converte isso para autocomplete="true" na renderização.

Eu criei um campo de pesquisa personalizado para pesquisar sObjects e, portanto, o comportamento do preenchimento automático do navegador é obviamente inútil, e se fosse html regular eu poderia apenas incluir o atributo autocomplete com o valor off, mas aura não parece deixe-me.

Uma resposta que encontrei sugeria o uso de html-autocomplete="off", então também tentei isso e, quando faço isso, o atributo simplesmente não é renderizado.

O que eu tentei

  • Eu tentei incluir autocomplete="off" e html-autocomplete="off" na tag de entrada
  • Tentei incluir autocomplette="off" e html-autocomplete="off" na tag de formulário ao redor da tag de entrada
  • Tentei ajustar o valor aria-autocomplete (não adiantou nada, não que eu realmente esperasse, mas queria pelo menos tentar).
  • Em este PDF da documentação da aura o atributo html autocomplete não é mencionado.
  • Eu “encontrei uma lista de tags HTML suportadas no aura , mas nenhuma lista de atributos suportados
  • Não consigo encontrar nada sobre esse comportamento nos documentos do relâmpago, e é muito difícil ao google por causa do elemento relâmpago / aura autocomplete

Existe alguma maneira de fazer isso? Ou documentação sobre esse comportamento?

Exemplo de código:

Este:

<aura:component> <input type="text" autocomplete="off" /> </aura:component> 

será lançado no final HTML como este:

<input type="text" autocomplete="true" data-aura-rendered-by="5:0"> 

Comentários

  • O que ' está impedindo você de usar a entrada html regular? Você poderia adicionar algum código à marcação para ajudar a reproduzir.
  • o que ' está me impedindo é a maneira como aura (ou talvez relâmpago) modifica o código. Mais código adicionado
  • Eu uso autocomplete = " senha " em vez de off / on como o cromo o respeita. O Chrome normalmente ignora o preenchimento automático de outra forma. Experimente e veja se funciona para você

Resposta

Possível a partir do Spring 19. Veja aqui

autocompletar – controla o preenchimento automático do campo. Este atributo é compatível com os tipos de entrada de email, pesquisa, tel, texto e url. Os valores ativado e desativado são suportados, mas o comportamento do preenchimento automático depende do navegador. Quando você define o atributo autocomplete, o componente lightning: input passa o valor para ser interpretado pelo navegador.

Resposta

Acabei de falar com o suporte da Salesforce e aparentemente isso é impossível no momento.

(Estou deixando minha resposta aqui não como aceita porque eu quero que alguém encontre esta pergunta quando houver uma opção melhor e responda e eu irei marcá-la como aceita.)


Solução alternativa:

No entanto, eu estou usando a seguinte solução alternativa de hack:

Dei uma id ao meu elemento e executei este JS:

turnOffAutocomplete : function(component) { var input = document.getElementById("id-of-the-input"); if(input.getAttribute("autocomplete") !== "off"){ input.setAttribute("autocomplete","off"); } } 

Estou executando-o não em init (porque é executado antes que os elementos sejam renderizados), mas em vez de quando o elemento de entrada está focado.

Quaisquer comentários para melhorar isso (então não “t tem que executar toda vez que a entrada for focada, por exemplo) seria muito apreciado.

Comentários

  • Mova essa lógica para o renderizador.

Resposta

A única solução que encontrei foi use uma textArea com rows = “1”

<textarea type="text" class="slds-input" rows="1" style="resize : none;" /> 

Você pode adicionar algumas slds classes para ter a mesma exibição que uma entrada normal.

Resposta

Você pode tentar isto aqui “s funcionou para mim usando aura: id e, em seguida, desativando o “autocomplete”. Você pode usar no método init do controlador de iluminação

component.find("fieldSelect").set("v.autocomplete","off"); 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *