$(document).ready(function() {
// #login-box password field
$('#password').attr('type', 'text');
$('#password').val('Password');
});
Se supone que esto cambia el #password
campo de entrada (con id="password"
) que es de type
password
un campo de texto normal, y luego completa el texto "Contraseña".
Sin embargo, no funciona. ¿Por qué?
Aquí está la forma:
<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
fuente
fuente
Respuestas:
Es muy probable que esta acción se evite como parte del modelo de seguridad del navegador.
Editar: de hecho, probando ahora en Safari, me sale el error
type property cannot be changed
.Edición 2: eso parece ser un error directamente de jQuery. Usar el siguiente código DOM directo funciona bien:
Edición 3: Directamente desde la fuente jQuery, esto parece estar relacionado con IE (y podría ser un error o parte de su modelo de seguridad, pero jQuery no es específico):
fuente
attr
pero que permita cambiar eltype
atributo en losinput
elementos.Aún más fácil ... no hay necesidad de crear todo el elemento dinámico. Simplemente cree dos campos separados, convirtiendo uno en el campo de contraseña 'real' (tipo = "contraseña") y otro en un campo de contraseña 'falso' (tipo = "texto"), estableciendo el texto en el campo falso en un color gris claro y configurando el valor inicial a 'Contraseña'. Luego agregue algunas líneas de Javascript con jQuery como se muestra a continuación:
Entonces, cuando el usuario ingresa al campo de contraseña 'falsa', estará oculto, se mostrará el campo real y el foco se moverá al campo real. Nunca podrán ingresar texto en el campo falso.
Cuando el usuario abandona el campo de contraseña real, el script verá si está vacío y, de ser así, ocultará el campo real y mostrará el falso.
Tenga cuidado de no dejar un espacio entre los dos elementos de entrada porque IE colocará uno un poco después del otro (renderizando el espacio) y el campo parecerá moverse cuando el usuario lo ingrese / salga.
fuente
$('#password').show(); $('#password').focus();
como$('#password').show().focus();
Solución de un paso
fuente
document.getElementById
¡debería ser suficiente y no necesita jQuery para ello! ;-)Hoy en día, solo puedes usar
Pero, por supuesto, deberías hacer esto
en todos menos en IE. Hay marcadores de posición para imitar esa funcionalidad en IE también.
fuente
placeholder="Password"
. La especificación HTML y MDN en elplaceholder
atributo. Un calce de JavaScript paraplaceholder
.Una solución más entre navegadores ... Espero que la esencia de esto ayude a alguien por ahí.
Esta solución intenta establecer el
type
atributo, y si falla, simplemente crea un nuevo<input>
elemento, preservando los atributos del elemento y los controladores de eventos.changeTypeAttr.js
( GitHub Gist ):fuente
Esto funciona para mi.
fuente
Una forma definitiva de usar jQuery:
Deje el campo de entrada original oculto de la pantalla.
Cree un nuevo campo de entrada sobre la marcha mediante JavaScript.
Migre la ID y el valor del campo de entrada oculto al nuevo campo de entrada.
Para evitar el error en IE como
type property cannot be changed
, puede encontrar esto útil de la siguiente manera:Adjunte evento click / focus / change al nuevo elemento de entrada, para activar el mismo evento en la entrada oculta.
El antiguo elemento de entrada oculto todavía está dentro del DOM, por lo que reaccionará con el evento desencadenado por el nuevo elemento de entrada. A medida que se intercambia la ID, el nuevo elemento de entrada actuará como el anterior y responderá a cualquier llamada de función a la ID de la entrada oculta anterior, pero se verá diferente.
fuente
¿Has intentado usar .prop ()?
http://api.jquery.com/prop/
fuente
No he probado en IE (ya que necesitaba esto para un sitio de iPad), un formulario que no podía cambiar el HTML pero podía agregar JS:
(¡Old School JS es feo al lado de todos los jQuery!)
Pero, http://bugs.jquery.com/ticket/1957 enlaza con MSDN: "A partir de Microsoft Internet Explorer 5, la propiedad type es read / write-once, pero solo cuando se crea un elemento de entrada con el método createElement y antes de que se agregue al documento ". Entonces, ¿tal vez podría duplicar el elemento, cambiar el tipo, agregar al DOM y eliminar el antiguo?
fuente
Simplemente cree un nuevo campo para evitar esta cosa de seguridad:
fuente
Recibí el mismo mensaje de error al intentar hacer esto en Firefox 5.
Lo resolví usando el siguiente código:
Y para usarlo, simplemente configure los atributos onFocus y onBlur de sus campos en algo como lo siguiente:
Lo uso también para un campo de nombre de usuario, por lo que alterna un valor predeterminado. Simplemente establezca el segundo parámetro de la función en '' cuando lo llame.
También vale la pena señalar que el tipo predeterminado de mi campo de contraseña es en realidad contraseña, en caso de que un usuario no tenga habilitado JavaScript o si algo sale mal, de esa manera su contraseña aún está protegida.
La función $ (document) .ready es jQuery y se carga cuando el documento ha terminado de cargarse. Esto luego cambia el campo de contraseña a un campo de texto. Obviamente, tendrá que cambiar 'password_field_id' a la identificación de su campo de contraseña.
¡Siéntase libre de usar y modificar el código!
Espero que esto ayude a todos los que tuvieron el mismo problema que yo :)
- CJ Kent
EDITAR: Buena solución pero no absoluta. Funciona en FF8 e IE8 PERO no completamente en Chrome (16.0.912.75 ver). Chrome no muestra el texto de la contraseña cuando se carga la página. Además, FF mostrará su contraseña cuando la función de autocompletar esté activada.
fuente
Solución simple para todos aquellos que desean la funcionalidad en todos los navegadores:
HTML
jQuery
fuente
Esto funcionó para mí.
fuente
Las propiedades de tipo no se pueden cambiar, debe reemplazar o superponer la entrada con una entrada de texto y enviar el valor a la entrada de contraseña al enviar.
fuente
Supongo que podría usar una imagen de fondo que contenga la palabra "contraseña" y volver a cambiarla a una imagen de fondo vacía en
.focus()
..blur()
----> imagen con "contraseña".focus()
-----> imagen sin "contraseña"También puedes hacerlo con algunos CSS y jQuery. Haga que un campo de texto aparezca exactamente encima del campo de contraseña, hide () está en foco () y enfóquese en el campo de contraseña ...
fuente
Prueba esta
demo está aquí
fuente
Funciona mucho más fácil con eso:
y para volver al campo de contraseña nuevamente, ( suponiendo que el campo de contraseña es la segunda etiqueta de entrada con tipo de texto ):
fuente
usa este es muy fácil
fuente
fuente
fuente
Esto hará el truco. Aunque podría mejorarse para ignorar los atributos que ahora son irrelevantes.
Enchufar:
Uso:
Violín:
http://jsfiddle.net/joshcomley/yX23U/
fuente
Simplemente esto:
como
Esto supone que su campo de entrada se configuró en "texto" de antemano.
fuente
Aquí hay un pequeño fragmento que le permite cambiar los
type
elementos de los documentos.jquery.type.js
( GitHub Gist ):Se soluciona el problema eliminando el
input
del documento, cambiando eltype
y volviendo a colocarlo donde estaba originalmente.Tenga en cuenta que este fragmento solo se probó para los navegadores WebKit, ¡sin garantías de nada más!
fuente
delete jQuery.attrHooks.type
para eliminar el manejo especial de jQuery de los tipos de entrada.Aquí hay un método que usa una imagen al lado del campo de contraseña para alternar entre ver la contraseña (ingreso de texto) y no verla (ingreso de contraseña). Uso una imagen de "ojo abierto" y "ojo cerrado", pero puedes usar lo que te convenga. La forma en que funciona es tener dos entradas / imágenes y al hacer clic en la imagen, el valor se copia de la entrada visible a la oculta, y luego se intercambia su visibilidad. A diferencia de muchas de las otras respuestas que usan nombres codificados, esta es lo suficientemente general como para usarla varias veces en una página. También se degrada con gracia si JavaScript no está disponible.
Así es como se ven dos de estos en una página. En este ejemplo, la contraseña A se ha revelado haciendo clic en su ojo.
fuente
Me gusta de esta manera, cambiar el tipo de un elemento de entrada: old_input.clone () .... Aquí hay un ejemplo. Hay una casilla de verificación "id_select_multiple". Si esto se cambia a "seleccionado", los elementos de entrada con el nombre "foo" se deben cambiar a casillas de verificación. Si no se marca, deberían volver a ser botones de radio.
fuente
Heres una solución DOM
fuente
He creado una extensión jQuery para alternar entre texto y contraseña. Funciona en IE8 (probablemente 6 y 7 también, pero no probado) y no perderá su valor o atributos:
Funciona de maravilla. Simplemente puede llamar
$('#element').togglePassword();
para cambiar entre los dos o dar una opción para 'forzar' la acción basada en otra cosa (como una casilla de verificación):$('#element').togglePassword($checkbox.prop('checked'));
fuente
Solo otra opción para todos los amantes de IE8, y funciona perfecto en los navegadores más nuevos. Simplemente puede colorear el texto para que coincida con el fondo de la entrada. Si tiene un solo campo, esto cambiará el color a negro cuando haga clic / enfoque en el campo. No usaría esto en un sitio público ya que 'confundiría' a la mayoría de las personas, pero lo estoy usando en una sección de ADMINISTRACIÓN donde solo una persona tiene acceso a las contraseñas de los usuarios.
-O-
Esto, también necesario, cambiará el texto a blanco cuando abandone el campo. Simple, simple, simple.
[Otra opción] Ahora, si tiene varios campos que está buscando, todos con el mismo ID, para el que lo estoy usando, agregue una clase de 'pasar' a los campos en los que desea ocultar el texto. Configure el los campos de contraseña escriben en 'texto'. De esta manera, solo se cambiarán los campos con una clase de 'pase'.
Aquí está la segunda parte de esto. Esto cambia el texto de nuevo a blanco después de abandonar el campo.
fuente
Acabo de hacer lo siguiente para cambiar el tipo de entrada:
y funciona.
Necesitaba hacer esto porque estaba usando jQuery UI datepickers 'en un proyecto ASP NET Core 3.1 y no funcionaban correctamente en los navegadores basados en Chromium (consulte: https://stackoverflow.com/a/61296225/7420301 ).
fuente