Disable submit if inputs empty jquery
Asked Answered
L

2

12

Disclaimer: I know there are quite a few questions out there with this topic and it has been highly addressed, though I need assistance in my particular case.

I am trying to check if the input values are empty on keyup then disable the submit button.

My HTML snippet:

<div class='form'>
  <form>
    <div class='field'>
      <label for="username">Username</label>
      <input id="username" type="text" />
    </div>
    <div class='field'>
      <label for="password">Password</label>
      <input id="password" type="password" />
    </div>
    <div class='actions'>
      <input type="submit" value="Login" />
    </div>
  </form>
</div>

I have used the example answer from here with some modifications:

(function() {
    $('.field input').keyup(function() {

        var empty = false;
        $('.field input').each(function() {
            if ($(this).val() == '') {
                empty = true;
            }
        });

        if (empty) {
            $('.actions input').attr('disabled', true);
        } else {
            $('.actions input').attr('disabled', false);
        }
    });
})()

Any help would be greatly appreciated!

Libnah answered 12/3, 2012 at 17:33 Comment(3)
This was just answered for another question. see: #9671823Appassionato
Seems to be working fine here: jsfiddle.net/yUQeqLeavings
You're right, it is working - I have greater issues :(Libnah
N
28

I would suggest disabling the button by default. I would also look at the length of the .val(), not check for an empty string. Lastly, I think document.ready() is much more readable than your existing code: Here is the full code:

HTML

<div class='form'>
  <form>
    <div class='field'>
      <label for="username">Username</label>
      <input id="username" type="text" />
    </div>
    <div class='field'>
      <label for="password">Password</label>
      <input id="password" type="password" />
    </div>
    <div class='actions'>
      <input type="submit" value="Login" disabled="disabled" />
    </div>
  </form>
</div>​

JS/jQuery

$(document).ready(function() {
  $('.field input').on('keyup', function() {
    let empty = false;

    $('.field input').each(function() {
      empty = $(this).val().length == 0;
    });

    if (empty)
      $('.actions input').attr('disabled', 'disabled');
    else
      $('.actions input').attr('disabled', false);
  });
});

Here's a working fiddle.

Norenenorfleet answered 12/3, 2012 at 17:37 Comment(2)
empty = $(this).val().length == 0 is not the same with your sample code on jsfiddle.net and it is not completely correct since the empty flag will only depend on the last input valuePattiepattin
great idea mate , but how the same can be achieved for atleast one value is entered ?Hamid
R
2

I use this in my project and it succes.

$(document).ready(function() {
  $('.field').keyup(function() {

    var empty = false;
    $('.field').each(function() {
        if ($(this).val().length == 0) {
            empty = true;
        }
    });                   

    if (empty) {
        $('.actions[type="submit"]').attr('disabled', 'disabled');
    } else {
        $('.actions[type="submit"]').removeAttr('disabled');
    }                
  });
});
Roofdeck answered 26/1, 2017 at 5:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.