try this, it accounts for checking all the required fields to see if
they are blank and disable

jQuery(function(){

        // all the required text fields
        var $required = $('input.required:text');

        // function checks for blank input
        var isBlank = function(str) {
                return $.trim(str).length==0
        }

        // function checks if other required fields are blank
        var checkAllRequired = function () {
                var allFilled = true;
                $required.each(function() {
                        if (isBlank(this.value))
                                allFilled = false;
                });
                return allFilled;
        }

        // initially disable or enable the submit button
        $("#submit").attr('disabled', checkAllRequired() ? null :
"disabled");


        // same as $required each blur
        $required.blur(function() {
                // checks if current field is blank
                if (isBlank(this.value))
                        $("#" + this.id + "_error").fadeIn(500);
                else
                        $("#" + this.id + "_error").fadeOut(500);

                $("#submit").attr('disabled', checkAllRequired() ? null :
"disabled");

     });

});

On Dec 22, 3:54 pm, "Rick Faircloth" <r...@whitestonemedia.com> wrote:
> Ok...after a lot of experimentation, I've got a solution
> that's working to the point that I've attempted to implement it.
>
> Here's the code:
>
> $(document).ready(function() {
>
>      $('input:text.required').each(function() {
>           $(this).blur(function() {
>                var val = (this.value.length);
>                     if (val == 0)
>                          { $("#" + this.id + "_error").fadeIn(500);
>                            $('#submit').attr('disabled', 'disabled'); }
>                     else
>                          { $("#" + this.id + "_error").fadeOut(500);
>                            $('#submit').removeAttr('disabled'); };
>
>      $('input:text.required').each(function() {
>           var val = (this.value.length);
>                if (val == 0)
>                     { $('#submit').attr('disabled', 'disabled'); }
>      });
>
>           });
>      });
>
> });
>
> This code allows for the following:
>
> - on blur of any text input with class 'required' the length is checked
> - if the length of the required field is > 0, then the error message is shown
>   and the submit button for the form is disabled
>
> - the second half of the code checks all the text inputs with class 'required'
> - if the length of any of the required text fields is 0, then the submit 
> button is disabled
>
> What I need to do now:
>
> - Allow for other type of inputs to be checked on blur, etc., such as selects
>   (Later, I'll add other types of validation, such as numeric, etc.)
>
> Question:
>
> - How do I modify ('input:text.required') to accommodate other types of 
> required inputs?
> - I tried ('input:text.required, input:select.required') and
>           ('input:text.required', 'input:select.required') but that didn't 
> work
>
> Clues or hints?
>
> Thanks,
>
> Rick
>
> > -----Original Message-----
> > From: jquery-en@googlegroups.com [mailto:jquery...@googlegroups.com] On 
> > Behalf Of MorningZ
> > Sent: Monday, December 22, 2008 2:40 PM
> > To: jQuery (English)
> > Subject: [jQuery] Re: How can I generalize this code for all values?
>
> > Try this change
>
> > $("#submit").attr('disabled', (val == "") ? "disabled" : null);
>
> > If that doesn't work, then perhaps:
>
> > if (val == "") {
> >       $("#" + this.id + "_error").fadeIn(500);
> >       $("#submit").attr("disabled", "disabled");
> > }
> > else {
> >       $("#" + this.id + "_error").fadeOut(500);
> >       $("#submit").removeAttr("disabled");
> > }
>
> > On Dec 22, 2:21 pm, "Rick Faircloth" <r...@whitestonemedia.com> wrote:
> > > I see in your example code that you're still using a hard-coded name
> > > for the input.  I'd like it completely generalized for all variables.
>
> > > I'm working towards creating code for categories of input types:  text,
> > > radio, checkbox, and textarea, etc.
>
> > > I modified your example, and all seems to be working well with the code
> > > below, except that the submit button is becoming enabled even when there
> > > is an error message showing.  I don't understand the last line enough
> > > to even tinker with that...suggestions?
>
> > > Thanks, Rick
>
> > > Here's the new code:
>
> > > $(document).ready(function() {
>
> > >      $("inp...@type='text']").each(function() {
>
> > >           $(this).blur(function() {
> > >                var val = $.trim(this.value);
>
> > >                if (val == "")
> > >                   { $("#" + this.id + "_error").fadeIn(500); }
> > >                else
> > >                   { $("#" + this.id + "_error").fadeOut(500); }
> > >                     $("#submit").attr('disabled', (val == "") ? 
> > > "disabled" : "");
> > >           });
> > >      });
>
> > > });
> > > > -----Original Message-----
> > > > From: jquery-en@googlegroups.com [mailto:jquery...@googlegroups.com] On 
> > > > Behalf Of MorningZ
> > > > Sent: Monday, December 22, 2008 1:44 PM
> > > > To: jQuery (English)
> > > > Subject: [jQuery] Re: How can I generalize this code for all values?
>
> > > > Just some advice:   why mix "-" and "_" all up?  it makes it easier if
> > > > they were the same
>
> > > > for instance
>
> > > > <input type="text" id="street_number" />
> > > > <img id="street_number_error" src="error.png" />
>
> > > > <input type="text" id="street_name" />
> > > > <img id="street_name_error" src="error.png" />
>
> > > > $("input[id^='street_']").each(function() {
> > > >        var val = $.trim(this.value);
> > > >        if (val == "") {
> > > >              $("#" + this.id + "_error").fadeIn(500);
> > > >        }
> > > >        else {
> > > >              $("#" + this.id + "_error").fadeOut(500);
> > > >         }
> > > >         $("#submit").attr("disabled", (val == "") ? "disabled" : "");
> > > > });
>
> > > > On Dec 22, 1:10 pm, "Rick Faircloth" <r...@whitestonemedia.com> wrote:
> > > > > Don't know if that's the best phrasing for the subject,
> > > > > but what I'm trying to do is develop some code that
> > > > > will work for all for inputs of type 'text', instead
> > > > > of hard-coding the id values.
>
> > > > > The original code is this:
>
> > > > > $('input#street_number').blur(function() {
>
> > > > >      if (this.value.length == 0)
> > > > >      { $('#street-number-required-error').fadeIn(500);
> > > > >        $('#submit').attr('disabled', 'disabled') }
> > > > >      if (this.value.length > 0)
> > > > >      { $('#street-number-required-error').fadeOut(500);
> > > > >        $('#submit').attr('disabled', '') };
>
> > > > > });
>
> > > > > $('input#street_name').blur(function() {
>
> > > > >      if (this.value.length == 0)
> > > > >      { $('#street-name-required-error').fadeIn(500);
> > > > >        $('#submit').attr('disabled', 'disabled') }
> > > > >      if (this.value.length > 0)
> > > > >      { $('#street-name-required-error').fadeOut(500);
> > > > >        $('#submit').attr('disabled', '') };
>
> > > > > });
>
> > > > > Here's my coding attempt: (no errors in firebug, but not response
> > > > > from the DOM)...
>
> > > > > $(document).ready(function() {
> > > > >      $("inp...@type='text']").each(function(i) {
> > > > >           $(this).blur(function() {
> > > > >                if (this.value.length == 0)
> > > > >                { $(this.id.replace(/_/g, '-')+'-error').fadeIn(500);
> > > > >                  $('#submit').attr('disabled', 'disabled') }
> > > > >                else
> > > > >                { $(this.id.replace(/_/g, '-')+'-error').fadeOut(500);
> > > > >                  $('#submit').attr('disabled', '') }
> > > > >           });
> > > > >      });
>
> > > > > });
>
> > > > > Anyone care to offer guidance to get this working?
>
> > > > > Thanks,
>
> > > > > Rick

Reply via email to