Estoy usando JQuery en laravel 8 y estoy tratando de mostrar "Este campo es obligatorio". cuando el campo de fecha se vacía. Sin embargo, cuando elimino el valor predeterminado (fecha de hoy), no aparece nada. Si pongo la fecha en el futuro, "La fecha no puede ser en el futuro". no muestra molestias. No puedo averiguar por qué. Es ingresando el "si (valor === "")"
jquery
$(document).on("change", "#date", function(){ var value = $("#date").val(); if (value === ""){ //this line doesn't show anything $("#dateError").text("This field is required.").css('color', '#ff0000').attr('class', 'col-6'); } else{ $("#dateError").text(""); } let today = new Date(); let inputDate = new Date(value); if (inputDate > today){ // this will show $("#dateError").text("The date can't be in the future.").css('color', '#ff0000').attr('class', 'col-6'); } else{ $("#dateError").text(""); } })html
<div class="row m-3"> <label for="date" class="col-lg-2 me-2">Date<i>*</i></label> <input type="date" id="date" name="date" value="{{ old('date', now()->toDateString()) }}" class="col-lg-9"/> </div> <div class="row m-3"> <span id="dateError"></span> </div>El problema básico es que está ejecutando el segundo if() independientemente de lo que suceda en el primero y el segundo sobrescribirá el texto establecido en el primero.
Una solución sería return cuando el valor está vacío y después de que se haya establecido el texto de error
if (value === ""){ $("#dateError").text("This field is required.").css('color', '#ff0000').attr('class', 'col-6'); // don't go any further return; } else ...Tal vez por ===. El valor es un objeto de fecha y lo está comparando con una cadena. Y para la variable hoy, solo creó una instancia.