Stack Overflow en español Asked on November 29, 2021
Quiero validar que al presionar un botón se valide si el input, en caso de estar vacío que salga un alert
y que haga foco en ese input
pero lo que sucede es que si esta vacío me sale el alerta pero me manda a otra página.
Objetivo. que al estar vacío el input salga un alert
y haga foco en el botón. Sino está vació que se redirija a otra página que se declara en el action=""
.
Código modificado
Formulario:
<form onsubmit="return control();" method="post" action="@Url.Action("Login", "Home")" >
<input type="text" id="uname" placeholder="Ingrese usuario..." name="uname" >
<input type="password" placeholder="Ingrese contraseña..." name="psw" required>
<button type="submit">Iniciar sesión</button>
</form>
Script:
<script>
function control() {
if (document.getElementById('uname') == null
|| document.getElementById('uname') == "") {
alert("El campo no puede estar vacío.");
document.getElementById('uname').focus();
return false;
}
return true;
}
</script>
El error:
No se si lo que buscas es a algo como esto, pero con Jquery seria algo asi:
$(document).ready(function() {
$('#searchForm').on('submit', function(event) {
var $searchValue = $('#searchValue').val();
if ($searchValue === "") {
event.preventDefault();
var error = '<br><span style="color: red;">Error. Vacio.</span>';
$('#searchValue').after($(error).fadeOut(2000));
$('#searchValue').css( "border-color","red");
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="processadordeforma.php" method="POST" id="searchForm">
<p>Search <input type="text" id="searchValue"></p>
<button type="submit">Submit</button>
</form>
Nota que si el valor del input esta vacio. La forma no se postea, y se adjunta un <span>
con error en rojo en la parte de abajo que desaparece despues de un tiempo. Puedes hacer esto para todos tus inputs y ademas agregar mas cosas de validacion que te den diferentes mensajes de error. Nota tambien que si el input si tiene un valor la forma se postea.
Answered by xelfury on November 29, 2021
En tu código he encontrado par de errores que son interesantes de corregir.
En primer lugar cuando haces document.getElementById(uname)
se te ha olvidado poner entre comillas el ID, ya que no lo está detectando como texto, si no como objeto.
Para solucionar que el formulario no haga el action
si no cumple los requisitos, es necesario que utilices onsubmit
.
function control() {
if (document.getElementById('uname') == null || document.getElementById('uname')=="") {
alert("El campo no puede estar vacío.");
document.getElementById('uname').focus();
return false;
}
return true;
}
<form class="modal-content animate" onsubmit="return control();" method="post" action="index.html" >
<div class="imgcontainer">
<span onclick="document.getElementById('id01').style.display='none'" class="close" title="Close Modal">×</span>
<img src="~/Images/00.png" alt="Avatar" class="avatar">
</div>
<div class="container">
<label for="uname"><b>Usuario:</b></label>
<input type="text" id="uname" placeholder="Ingrese usuario..." name="uname" >
<label for="psw"><b>Contraseña:</b></label>
<input type="password" placeholder="Ingrese contraseña..." name="psw">
<button type="submit">Iniciar sesión</button>
<label>
<input type="checkbox" checked="checked" name="remember"> Recuérdame
</label>
</div>
<div class="container" style="background-color:#f1f1f1">
<button type="button" onclick="document.getElementById('id01').style.display='none'" class="cancelbtn">Cancelar</button>
</div>
</form>
Al devolver false
en el javascript, no se ejecutará el action
. Si devuelves true
lo ejecutará.
Otro error es la forma en la que das focus al input. Estabas usando una forma incorrecta. Para hacer focus debes hacer: document.getElementById('uname').focus();
, ya que necesitas hacer referencia al input del HTML.
PD: teniendo en cuenta el potencial que tiene onsubmit, podrías aprovecharlo para aplicar más restricciones incluso al campo de contraseña. (O regex si el usuario debe ser un email, etc...)
Puedes echarle un vistazo a la documentación del focus().
Espero haberte ayudado.
Answered by Juan José on November 29, 2021
Opciones:
La forma mas simple sería el agregar el atributo required
a tus inputs
eso generaría que cuando presiones el botón del formulario si es que estos no se han llenado entonces te quedes en la misma página y el foco se ponga en dicho input
<input type="text" required>
Por otro lado, si lo dejamos con JS, te manda a otra página por que:
action
declarado en el form
diciéndole a donde mandar la informaciónsubmit
que el botón tendría se lleve a caboComo ejemplo para que veas como implementarlo pudieras hacerlo así:
click
value
del input
esta vacía
input
tenga el foco activado <form action="url">
<input id="elemento" type="text">
<input id="envio" type="submit">
</form>
<script>
let botonEnvio = document.getElementById('envio');
let texto = document.getElementById('elemento');
botonEnvio.addEventListener('click', (event) => {
event.preventDefault();
if (texto.value === '') {
texto.focus();
}
})
</script>
EDICIÓN
Para complementar mi respuesta considero que debería ser así:
else
harías una petición AJAX mandando a tu backend los datosAnswered by BetaM on November 29, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP