whyZaya
whyZaya

Reputation: 1

How do you make a javascript "if" statement with both "and" and "or"?

I'm trying to make a page where you fill in some input boxes and check a radio button, and if you complete all of it, you can click a div, and animations happen. The specific input boxes are not the only ones on the page. I'm trying to use a javascript "if" statement that has a bunch of "and"'s and an "or" in parentheses, but when I open the page, the code doesn't run. This isn't all my code, and I know the javascript and it's libraries are linked because I've been coding this site for a while, and everything has worked up until now. I checked the code in a javascript validator and it seemed fine. I'm not sure what I'm doing wrong.

$(document).ready(function(){
    if ( $(".managementCompanyName").val() !== '' && 
     $(".approvedBy").val() !== '' && 
     $(".contractStartDate").val() !== '' && 
     $(".proposalNumber").val() !== '' && 
     $(!$("input[name='proposalReviewedForInvoice']:checked").val() || !$("input[id='proposalNotReviewedForInvoice']:checked").val()) )  {
        //do stuff
    }
});

Alternatively I have

$(document).ready(function(){
    if (   $(".managementCompanyName").val() !== "" && 
       $(".approvedBy").val() !== "" && 
           $(".contractStartDate").val() !== "" && 
       $(".proposalNumber").val() !== "" && 
       $("input[name='proposalReviewedForInvoice']:checked").val() !== "" )  {
           //do stuff
    }
});

This code seems to work on another part of the site where there's only one input as a requirement. Thank you if you can spot my error.

Upvotes: 0

Views: 84

Answers (2)

zai
zai

Reputation: 75

for handling errors much better if you only used the "OR (||) " condition.

$(document).ready(function(){
    var management = $(".managementCompanyName").val();
    var approved = $(".approvedBy").val();
    var contract = $(".contractStartDate").val();
    var proposed_num = $(".proposalNumber").val();
    var proposed_rev = $("input[name='proposalReviewedForInvoice']:checked").val();

    if ( management == '' || approved == '' || contract == '' || proposed_num == ''
         || proposed_rev == '' ) {
        // error message
    } else {
        // do stuff
    }
});

Upvotes: 0

cookie monster
cookie monster

Reputation: 10972

Wrap the || part in parentheses, otherwise the first operand to || is actually the last result from the last &&.

/*$*/(!$("input[name='proposalReviewedForInvoice']:checked").val() ||  
      !$("input[id='proposalNotReviewedForInvoice']:checked").val()) )  {

And actually it seems that you rather had them wrapped in a $(), which will always return a jQuery object, which will always be "truthy" in the condition.

Upvotes: 4

Related Questions