2012-07-14 10 views
6

Sto tentando di disabilitare un pulsante di invio fino a quando l'utente ha compilato i campi di input nel modulo.disattiva pulsante di invio se gli input sono vuoti con jQuery

Ho trovato il thread THIS qui che ha avuto una risposta davvero buona. Ho solo un piccolo problema nel riattivare il pulsante di invio quando i campi sono compilati.

Qualcuno può dare un'occhiata a questa funzione e aiutarmi a capire cosa mi manca? Qualsiasi aiuto sarebbe molto apprezzato: D Grazie.

Heres a Fiddle anche

$(document).ready(function() { 
var $submit = $("input[type=submit]"); 

if ($("input:empty").length > 0) { 
$submit.attr("disabled","disabled"); 
} else { 
$submit.removeAttr("disabled"); 
} 
}); 


<form method="POST" action="<%=request.ServerVariables("SCRIPT_NAME")%>"> 
User Name: <input name="Username" type="text" size="14" maxlength="14" /><br /> 
Password: <input name="last_name" type="password" size="14" maxlength="14"><br /> 
<input type="submit" value="Login" name="Submit" id="loggy"> 
</form> 

risposta

14
$(document).ready(function() { 
    var $submit = $("input[type=submit]"), 
     $inputs = $('input[type=text], input[type=password]'); 

    function checkEmpty() { 

     // filter over the empty inputs 

     return $inputs.filter(function() { 
      return !$.trim(this.value); 
     }).length === 0; 
    } 

    $inputs.on('blur', function() { 
     $submit.prop("disabled", !checkEmpty()); 
    }).blur(); // trigger an initial blur 
}); 

Working sample

Invece di sfocatura è anche possibile utilizzare keyup come:

$inputs.on('keyup', function() { 
     $submit.prop("disabled", !checkEmpty()); 
    }).keyup(); // trigger an initial keyup 

Inoltre è possibile combinare più eventi:

$inputs.on('keyup blur', function() { 
     $submit.prop("disabled", !checkEmpty()); 
    }).keyup(); // trigger any one 
+0

Grazie mille! funziona perfettamente: D è possibile modificare la sfocatura? quindi l'utente non deve fare clic lontano dagli input per poter rimuovere la disabilitazione? – xxstevenxo

+0

@xxstevenxo yup, guarda il mio aggiornamento. puoi fare anche con keyup – thecodeparadox

+0

, ho cambiato "blur" in "keypress" e ho ottenuto il risultato esatto che speravo. Grazie ancora per il tuo aiuto e la tua demo! : D – xxstevenxo

1

Nella tua domanda non vedo il codice in cui si controlla costantemente lo stato degli ingressi, penso che il problema sia questo.

È possibile utilizzare eventi dal vivo per farlo. Usando il codice come ad esempio:

$(document).ready(function() { 
     var $submit = $("input[type=submit]"); 

     function checkSubmitState() 
     { 
      if ($("input:empty").length > 0) { 
      $submit.attr("disabled","disabled"); 
      } else { 
      $submit.removeAttr("disabled"); 
      } 
     } 

     // check the submit state on every change or blur event. 
     $("input").live("change blur", checkSubmitState); 
}); 
0

utilizzare l'evento keyup per controllare il valore prima di eseguire la condizione:

$(document).ready(function() { 
    $('input:text, input:password').keyup(function() { 
     if ($(this).val() !== "") { 
      $('input:submit').removeAttr('disabled'); 
     } else { 
      $('input:submit').attr('disabled', 'true'); 
     } 
    }); 
}); 

http://jsfiddle.net/tovic/He4Kv/23/

0

Alcune di queste risposte qui sono un lil fuori moda come stavo cercando uno snippet di jQuery. Li ho testati e non sembrano funzionare più correttamente a causa di deprecazioni credo.

Così ho creato il mio e qui c'è un nuovo modo di lavorare (jQuery> = 3.0) che ascolta per esempio l'evento di input.

var inp = $('[type=text]'), 
 
    btn = $('[type=button]') 
 
btn.prop('disabled',true) 
 

 
inp.on('input',() => { 
 
    var empty 
 
    inp.map(v => 
 
    !inp.eq(v).val() ? 
 
     empty = true : false 
 
) 
 
    btn.prop('disabled',empty || false) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<form> 
 
\t <input type=text><br> 
 
\t <input type=text><br> 
 
\t <input type=text><br> 
 
\t <input type=button value=Send> 
 
</form>

Una pianura JavaScript esempio è here.

Problemi correlati