17

I am trying to handle form validation on button click. It is validating the form but not showing error.

can anyone help me in this?

<form id="the-form" action="#">
    <input type="text" required="required" placeholder="Required text" />
    <input type="email" required="required" placeholder="email" />
    <button id="btn" type="button">Submit</button>
</form>

JavaScript:

$("#btn").on("click", function(){
    if($("#the-form")[0].checkValidity())
    {
        alert('validated');
    }
    else
    {
        //show errors
        return false;
    }
});

http://jsfiddle.net/5ycZz/

TylerH
  • 20,799
  • 66
  • 75
  • 101
Imran Rashid
  • 3,352
  • 4
  • 31
  • 41

5 Answers5

34

Try

reportValidity()

So you'd have

$("#btn").on("click", function(){
    if($("#the-form")[0].checkValidity()) {
        alert('validated');
    }
    else {
        $("#the-form")[0].reportValidity();
    }
});
Brian Davis
  • 745
  • 1
  • 11
  • 14
6

I've achieved this by doing steps below:

1) I'm having form:

<form>
    <textarea required></textarea>
    <input type="submit" style="display:none;"/>
</form>

<a>Some other button to trigger event</a>

2) Now we have to check if the form is filled correctly:

//this is <a> click event:
if (!$('form')[0].checkValidity()) {
    $('form').find('input[type="submit"]').click();
    return false;
}

This will trigger form sending but won't send because there are errors ;)

It appears that html5 validation errors are displayed on input[type="submit"] click :)

Hope will work for You too! :)

Mr.TK
  • 1,743
  • 2
  • 17
  • 22
4

here is the perfect answer

<form id="the-form" action="#">
<input type="text" required="required" placeholder="Required text" />
<input type="email" required="required" placeholder="email" />
<button id="btn" type="submit">Submit</button>

$("#btn").on("click", function(){
if($("#the-form")[0].checkValidity())
{
    alert('validated');
}
else
{
  return 0;
}

});

Talha Habib
  • 312
  • 3
  • 4
  • 18
0

Remove the else statement. (Update)

$("#btn").on("click", function(){
if($("#the-form")[0].checkValidity())
{
    alert('validated'); //will appear if name and email are of valid formats
}
});
Elmer
  • 259
  • 1
  • 3
  • 11
  • i dont want to show errors in alert it should show error in bootstrap popover which is default behaviour of html5 – Imran Rashid Sep 05 '13 at 10:50
  • @ImranRashid I see. Remove the 'else' statement: else { //show errors alert('not validated'); } – Elmer Sep 05 '13 at 10:54
  • check on http://jsfiddle.net/5ycZz/.. if i change button type to submit it works otherwise it show no msg – Imran Rashid Sep 05 '13 at 11:01
  • @ImranRashid The fiddle you gave me has the button type="button" which works. It shows the Validation box. – Elmer Sep 05 '13 at 11:04
-1

You should be able to simply add onclick="return validateForm()".

<button id="btn" onclick="return validateForm()" type="button">Submit</button>
Jake Hunter
  • 131
  • 1
  • 2
  • 8