title: How can we remove a customValidity message on keyup?
body: <p>My problem is that when I set a customValidity to an input (<code>#zip_code</code>), it doesn't stop displaying it everytime I update this input (I'm using it in a keyup event and using <code>setCustomValidity('')</code> doesn't resolve the issue)</p>
  
  <p>I've this html : </p>
  
  <pre class="lang-html prettyprint-override"><code>&lt;input type="text"  required placeholder="Nom"         name="lastname"     class="col-md-6 form-control"                                                 /&gt;
  &lt;input type="text"  required placeholder="Prénom"      name="firstname"    class="col-md-6 form-control"                                                 /&gt;
  &lt;input type="text"  required placeholder="Adresse"     name="address"      class="col-md-12 form-control"                                                /&gt;
  &lt;input type="text"  required placeholder="Code Postal" name="zip_code"     class="col-md-6 form-control"  id="zip_code" data-inputmask="'mask': '99999'" /&gt;
  &lt;input type="text"  required placeholder="Ville"       name="city"         class="col-md-6 form-control disabled"  id="city"                             /&gt;
  &lt;input type="text"  required placeholder="Téléphone"   name="phone_number" class="col-md-12 form-control" data-inputmask="'mask': '99 99 99 99 99'"      /&gt;
  &lt;input type="email" required placeholder="Email"       name="email"        class="col-md-12 form-control"                                                /&gt;
  </code></pre>
  
  <p>and this javascript : </p>
  
  <pre class="lang-js prettyprint-override"><code>var zipCode = "";
  $('#zip_code').keyup(function() {
      zipLength = zipCode.split('_')[0].length
      if (zipLength &lt; 5 || zipLength == 5 &amp;&amp; $( this ).val().split('_')[0].length != 5) {
          zipCode = $( this ).val();
          $('#city').replaceTag('&lt;input&gt;', true);
          $('#city').addClass('disabled');
          $('#city').focus(function(){$("#zip_code").focus();});
          $('#zip_code')[0].setCustomValidity("Veuillez renseigner un code postal valide.");
          $('#city').attr('tabindex', -1);
          $('#city').attr("placeholder", zipCode.length == 0 ? "Ville" : "Aucune ville pour ce code postal");
          $('#city').html('');
          if (zipCode.length == 5) {
              $.ajax( {
                  url: "an url to a json representating every city having the zipCode",
                  dataType: "json",
                  method: "POST",
                  data: {
                      zipCode: zipCode
                  },
                  success: function( data ) {
                      data.cities.map( function( x, i ) {
                          let cityName = x.name.charAt(0) + x.name.substr(1).toLowerCase().trim();
                          if (i == 0) {
                              if (data.cities.length &gt; 1) {
                                  $('#city').removeClass('disabled');
                                  $('#city').replaceTag( '&lt;select&gt;', true );
                                  $("#city").append( new Option( cityName, cityName, true ) );
                              } else {
                                  $('#city').addClass('disabled');
                                  $('#zip_code')[0].setCustomValidity("Veuillez renseigner un code postal valide.");
                                  $('#city').focus(function(){$("#zip_code").focus();});
                                  $('#city').val( cityName );
                              }
                          } else {
                              $("#city").append( new Option( cityName, cityName ) );
                          }
                      } );
                  }
              } );
          }
      }
  });
  $(":input").inputmask();
  </code></pre>
  
  <p>So as you can see i'm using the inputmask module. And some tricks to disable totally the <code>#city</code> input (no direct focus, no tabulation and no focus on invalidity possible) I had to do my own "disabled" because the "disabled" attribute also disables the "required" attribute. I think I can somehow patch it by using empty customValidity, but i've no clue how.</p>