Es importante interpretar el código de forma correcta previamente a adaptarlo a tu proyecto y si tquieres aportar algo puedes comentarlo.
Solución:
El required
la propiedad es boolean
:
$('form#register').find('input').each(function()
if(!$(this).prop('required'))
console.log("NR");
else
console.log("IR");
);
Referencia: HTMLInputElement
Una respuesta un poco más completa, inspirada en la respuesta aceptada:
$( '#form_id' ).submit( function( event )
event.preventDefault();
//validate fields
var fail = false;
var fail_log = '';
var name;
$( '#form_id' ).find( 'select, textarea, input' ).each(function()
if( ! $( this ).prop( 'required' ))
else
if ( ! $( this ).val() )
fail = true;
name = $( this ).attr( 'name' );
fail_log += name + " is required n";
);
//submit if fail never got set to true
if ( ! fail )
//process form here.
else
alert( fail_log );
);
En este caso hacemos un loop de todo tipo de entradas y si son requeridas, verificamos si tienen un valor, y si no, se agrega un aviso de que son requeridas a la alerta que se ejecutará.
Tenga en cuenta que este ejemplo asume que el formulario procederá dentro del condicional positivo a través de AJAX o similar. Si realiza el envío a través de métodos tradicionales, mueva la segunda línea, event.preventDefault();
al interior del condicional negativo.
No necesitas jQuery para hacer esto. Aquí hay una solución ES2015:
// Get all input fields
const inputs = document.querySelectorAll('#register input');
// Get only the required ones
const requiredFields = Array.from(inputs).filter(input => input.required);
// Do your stuff with the required fields
requiredFields.forEach(field => /* do what you want */);
O simplemente puede usar el :required
selector:
Array.from(document.querySelectorAll('#register input:required'))
.forEach(field => /* do what you want */);