$(document).ready(function() {
// #login-box password field
$('#password').attr('type', 'text');
$('#password').val('Password');
});
Isso deve alterar o #password
campo de entrada (com id="password"
) que é de type
password
um campo de texto normal e, em seguida, preencha o texto "Senha".
Mas não funciona. Por quê?
Aqui está o formulário:
<form enctype="application/x-www-form-urlencoded" method="post" action="/auth/sign-in">
<ol>
<li>
<div class="element">
<input type="text" name="username" id="username" value="Prihlasovacie meno" class="input-text" />
</div>
</li>
<li>
<div class="element">
<input type="password" name="password" id="password" value="" class="input-text" />
</div>
</li>
<li class="button">
<div class="button">
<input type="submit" name="sign_in" id="sign_in" value="Prihlásiť" class="input-submit" />
</div>
</li>
</ol>
</form>
javascript
jquery
html-input
Richard Knop
fonte
fonte
Respostas:
É muito provável que essa ação seja evitada como parte do modelo de segurança do navegador.
Edit: na verdade, testando agora no Safari, recebo o erro
type property cannot be changed
.Edit 2: isso parece ser um erro direto do jQuery. Usar o seguinte código DOM direto funciona bem:
Edit 3: Diretamente da fonte do jQuery, isso parece estar relacionado ao IE (e pode ser um bug ou parte de seu modelo de segurança, mas o jQuery não é específico):
fonte
attr
mas permite alterar otype
atributo nosinput
elementos.Ainda mais fácil ... não há necessidade de toda a criação de elementos dinâmicos. Basta criar dois campos separados, tornando um o campo de senha 'real' (type = "password") e o campo de senha 'fake' (type = "text"), configurando o texto no campo falso para uma cor cinza claro e definindo o valor inicial para 'Senha'. Em seguida, adicione algumas linhas de Javascript com jQuery, como abaixo:
Portanto, quando o usuário digitar o campo de senha 'falso', ele será oculto, o campo real será mostrado e o foco será movido para o campo real. Eles nunca poderão inserir texto no campo falso.
Quando o usuário deixa o campo da senha real, o script verá se está vazio; nesse caso, ocultará o campo real e exibirá o falso.
Cuidado para não deixar espaço entre os dois elementos de entrada, pois o IE se posicionará um pouco após o outro (renderizando o espaço) e o campo parecerá se mover quando o usuário entrar / sair.
fonte
$('#password').show(); $('#password').focus();
as$('#password').show().focus();
Solução de uma etapa
fonte
document.getElementById
deve ser suficiente e você não precisa do jQuery! ;-)Hoje em dia, você pode simplesmente usar
Mas é claro, você realmente deveria fazer isso
em todos, exceto no IE. Existem espaços reservados para imitar essa funcionalidade no IE também.
fonte
placeholder="Password"
. A especificação de HTML e MDN noplaceholder
atributo. Um shim JavaScript paraplaceholder
.Uma solução mais entre navegadores ... Espero que a essência disso ajude alguém por aí.
Esta solução tenta definir o
type
atributo e, se falhar, simplesmente cria um novo<input>
elemento, preservando os atributos do elemento e os manipuladores de eventos.changeTypeAttr.js
( GitHub Gist ):fonte
Isso funciona para mim.
fonte
A melhor maneira de usar o jQuery:
Deixe o campo de entrada original oculto na tela.
Crie um novo campo de entrada em tempo real por JavaScript.
Migre o ID e o valor do campo de entrada oculto para o novo campo de entrada.
Para contornar o erro no IE como
type property cannot be changed
, você pode achar isso útil da seguinte maneira:Anexe um evento de clique / foco / alteração ao novo elemento de entrada, a fim de disparar o mesmo evento na entrada oculta.
O elemento de entrada oculto antigo ainda está dentro do DOM, portanto reagirá com o evento acionado pelo novo elemento de entrada. À medida que o ID é trocado, o novo elemento de entrada age como o antigo e responde a qualquer chamada de função ao ID da entrada oculta antiga, mas parece diferente.
fonte
Você já tentou usar .prop ()?
http://api.jquery.com/prop/
fonte
Não testei no IE (já que eu precisava disso para um site para iPad) - um formulário que não podia alterar o HTML, mas poderia adicionar JS:
(JS da velha escola é feio ao lado de todo o jQuery!)
Mas, http://bugs.jquery.com/ticket/1957 vincula ao MSDN: "No Microsoft Internet Explorer 5, a propriedade type é de leitura / gravação uma vez, mas apenas quando um elemento de entrada é criado com o método createElement e antes de ser adicionado ao documento ". então talvez você possa duplicar o elemento, alterar o tipo, adicionar ao DOM e remover o antigo?
fonte
Basta criar um novo campo para ignorar essa coisa de segurança:
fonte
Recebi a mesma mensagem de erro ao tentar fazer isso no Firefox 5.
Eu o resolvi usando o código abaixo:
E para usá-lo, basta definir os atributos onFocus e onBlur dos seus campos para algo como o seguinte:
Eu também uso isso para um campo de nome de usuário, portanto, alterna um valor padrão. Basta definir o segundo parâmetro da função para '' quando você o chamar.
Além disso, pode ser interessante notar que o tipo padrão do meu campo de senha é realmente senha, apenas no caso de um usuário não ter o javascript ativado ou se algo der errado, dessa forma a senha ainda estará protegida.
A função $ (document) .ready é jQuery e carrega quando o documento termina de carregar. Isso muda o campo da senha para um campo de texto. Obviamente, você terá que alterar 'password_field_id' para o ID do seu campo de senha.
Sinta-se livre para usar e modificar o código!
Espero que isso ajude todos que tiveram o mesmo problema que eu :)
- CJ Kent
EDIT: Boa solução, mas não absoluta. Funciona no FF8 e IE8, mas não totalmente no Chrome (versão 16.0.912.75). O Chrome não exibe o texto da senha quando a página é carregada. Além disso - o FF exibirá sua senha quando o preenchimento automático estiver ativado.
fonte
Solução simples para todos aqueles que desejam a funcionalidade em todos os navegadores:
HTML
jQuery
fonte
Isso funcionou para mim.
fonte
As propriedades de tipo não podem ser alteradas. É necessário substituir ou sobrepor a entrada por uma entrada de texto e enviar o valor à entrada de senha no envio.
fonte
Eu acho que você poderia usar uma imagem de fundo que contenha a palavra "senha" e alterá-la novamente para uma imagem de fundo vazia
.focus()
..blur()
----> imagem com "senha".focus()
-----> imagem sem "senha"Você também pode fazer isso com CSS e jQuery. Faça com que um campo de texto apareça exatamente no topo do campo de senha, hide () esteja em focus () e concentre-se no campo de senha ...
fonte
Experimente esta
demonstração aqui
fonte
Funciona muito mais fácil com isso:
e para voltar ao campo de senha novamente ( assumindo que o campo de senha seja a segunda tag de entrada com tipo de texto ):
fonte
use este aqui é muito fácil
fonte
fonte
fonte
Isto irá fazer o truque. Embora possa ser melhorado ignorar atributos que agora são irrelevantes.
Plugar:
Uso:
Violino:
http://jsfiddle.net/joshcomley/yX23U/
fonte
Simplesmente isso:
tal como
Isso pressupõe que seu campo de entrada tenha sido definido como "texto" antes da mão.
fonte
Aqui está um pequeno trecho que permite alterar os
type
elementos nos documentos.jquery.type.js
( GitHub Gist ):Ele soluciona o problema removendo
input
o documento, alterando otype
e colocando-o de volta onde estava originalmente.Observe que esse trecho foi testado apenas para navegadores WebKit - não há garantias para mais nada!
fonte
delete jQuery.attrHooks.type
para remover o tratamento especial do jQuery dos tipos de entrada.Aqui está um método que usa uma imagem ao lado do campo de senha para alternar entre ver a senha (entrada de texto) e não vê-la (entrada de senha). Uso uma imagem de "olho aberto" e "olho fechado", mas você pode usar o que mais lhe convier. O modo como funciona é ter duas entradas / imagens e, ao clicar na imagem, o valor é copiado da entrada visível para a oculta e, em seguida, sua visibilidade é trocada. Ao contrário de muitas das outras respostas que usam nomes codificados, essa é geral o suficiente para ser usada várias vezes em uma página. Também degrada normalmente se o JavaScript estiver indisponível.
Aqui está a aparência de dois deles em uma página. Neste exemplo, a Senha-A foi revelada clicando no olho.
fonte
Eu gosto dessa maneira, para alterar o tipo de um elemento de entrada: old_input.clone () .... Aqui está um exemplo. Há uma caixa de seleção "id_select_multiple". Se isso for alterado para "selecionado", os elementos de entrada com o nome "foo" deverão ser alterados para caixas de seleção. Se não estiver marcado, eles devem se tornar botões de opção novamente.
fonte
aqui está uma solução DOM
fonte
Eu criei uma extensão jQuery para alternar entre texto e senha. Funciona no IE8 (provavelmente 6 e 7 também, mas não foi testado) e não perderá seu valor ou atributos:
Funciona como um encanto. Você pode simplesmente ligar
$('#element').togglePassword();
para alternar entre os dois ou dar uma opção para 'forçar' a ação com base em outra coisa (como uma caixa de seleção):$('#element').togglePassword($checkbox.prop('checked'));
fonte
Apenas mais uma opção para todos os amantes do IE8, e funciona perfeitamente em navegadores mais recentes. Você pode apenas colorir o texto para corresponder ao fundo da entrada. Se você tiver um único campo, isso mudará a cor para preto quando você clicar / focalizar o campo. Eu não usaria isso em um site público, pois isso 'confundiria' a maioria das pessoas, mas estou usando-o em uma seção ADMIN, na qual apenas uma pessoa tem acesso às senhas dos usuários.
-OU-
Isso, também necessário, mudará o texto de volta para branco quando você sair do campo. Simples, simples, simples.
[Outra opção] Agora, se você tiver vários campos que estiver procurando, todos com o mesmo ID, como eu estou usando, adicione uma classe de 'passe' aos campos nos quais deseja ocultar o texto. Defina campos de senha, digite "texto". Dessa forma, apenas os campos com uma classe de 'passe' serão alterados.
Aqui está a segunda parte disso. Isso muda o texto novamente para branco depois que você sai do campo.
fonte
Eu apenas fiz o seguinte para alterar o tipo de uma entrada:
e funciona.
Eu estava precisando fazer isso porque estava usando os datepickers da UI do jQuery em um projeto do ASP NET Core 3.1 e eles não estavam funcionando corretamente em navegadores baseados no Chromium (consulte: https://stackoverflow.com/a/61296225/7420301 ).
fonte