2017-07-01 1 views
0

Eine Schaltfläche ist standardmäßig deaktiviert. Es gibt zwei Texteingaben. Wenn beide leer sind, sollte das Formular deaktiviert bleiben. Wenn beide Felder einen Wert haben, sollte die Schaltfläche aktiviert sein.jQuery-Deaktiviertaste, wenn einer der Eingänge leer ist

dieser Versuch ...

$(document).ready(function(){ 
    $('#custNameNext').prop('disabled',true); 
    $('#customer').keyup(function(){ 
     $(this).val($(this).val().replace(/[^\w\s]+/g, '')); 
     $('#custNameNext').prop('disabled', ((this.value == '') || ($('#customerCost').val() == '')) ? true : false); 
    }); 
}); 

... aber b/c ich in einem keyup bin, wird die Schaltfläche nicht aktivieren, wenn ich Werte in beiden Bereichen haben, und dann wieder auf das erste Feld mit der Taste und geben Sie zusätzlichen Text ein.

Haben Probleme, dies durch zu denken!

Antwort

1

Dies sollte für Sie arbeiten:

$(document).ready(function() { 
 
    $('#custNameNext').prop('disabled', true); 
 

 
    function validateNextButton() { 
 
    var buttonDisabled = $('#customer').val().trim() === '' || $('#customerCost').val().trim() === ''; 
 
    $('#custNameNext').prop('disabled', buttonDisabled); 
 
    } 
 

 
    $('#customer').on('keyup', validateNextButton); 
 
    $('#customerCost').on('keyup', validateNextButton); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<form> 
 
    <input id="customer" name="first-input" type="text"> 
 
    <input id="customerCost" name="second-input" type="text"> 
 
    <input id="custNameNext" type="submit" value="Submit" disabled="disabled"> 
 
</form>

I habe die IDs eingefügt hatte bereits in Ihrem Schnipsel. Als Vorschlag wäre es besser, lange Codezeilen wegzulassen und sie in kohärentere zu teilen.

Die Testanweisung, die in buttonDisabled gehalten wird, kann geändert werden, benötigen Sie eine andere Validierung, damit die Übergabeschaltfläche aktiviert wird (z. B. Regex).

+0

Danke für Ihre Antwort! Arbeitete großartig für mich, da es die Keyup-Funktion enthielt, die ich brauchte. Wenn beide Felder dieselbe Validierungsfunktion verwenden, ist dies ein brillanter Weg, um sicherzustellen, dass keine der beiden Felder leer ist, egal, welche zuerst ausgefüllt wird! Ich habe meine Regex zu ValidiereNextButton hinzugefügt und funktioniert wie ein Zauber! – webguy

+0

Sehr froh zu helfen, @webguy. – Siavas

1

Sie können dem Ereignishandler beide Eingaben hinzufügen, und indem Sie das Ereignis input verwenden, erfassen Sie auch das Einfügen und einige andere Szenarien.

Dann einfach auf den Werten filtern, um nachzusehen, ob eine von ihnen sind leer

$(document).ready(function() { 
    $('#custNameNext').prop('disabled', true); 

    $('#customer, #customerCost').on('input', function() { 
      var val = $('#customer, #customerCost').filter(function() { 
       return this.value.trim().length !== 0; 
     }).length === 0; 

     $('#custNameNext').prop('disabled', val); 
    }); 
}); 

FIDDLE

+0

Danke für Ihre Antwort! Ich konnte nicht leicht herausfinden, wie ich das Key-up integrieren konnte, das ich brauchte, um zu begrenzen, was in den Kundenfiles hingehen könnte, aber ich habe etwas aus Ihrer Antwort gelernt, und das weiß ich zu schätzen! – webguy

Verwandte Themen