7

In the code below, is there a better way to check the condition using jQuery?

if(($('#test1').val() == 'first_value')||($('#test2').val() == 'second_value') && ($('#test3').val()!='third_value')|| ($('#test4').val()!='fourth_value'))
2
  • I think your question could be posted on codereview.stackexchange.com instead of stackoverflow Commented May 15, 2012 at 8:40
  • There's nothing built in, no. Commented May 15, 2012 at 8:41

4 Answers 4

5

Unless there are other concerns, like if you will reuse the #test1, ... fields for more processing, yours should be good.

If you will fetch any of the values again to do something I would recommend storing the $('#test1') result in a variable so that you do not need to requery the dom.

Ex:

var t1 = $('#test1');
if((t1.val() == 'first_value')||($('#test2').val() == 'second_value') && ($('#test3').val()!='third_value')|| ($('#test4').val()!='fourth_value')) {
    t1.val('Set new value');
}

This also improves readability of the row ;)

Sign up to request clarification or add additional context in comments.

Comments

1
var values = ['first_value', 'second_value', 'third_value', 'fourth_value'];
$('#test1, #test2, #test3, #test4').each(function(index, el) {
   if($.inArray(this.value, values)) {
     // do some job;
     return false; // or break;
   }
});

1 Comment

@user1060990 update my answer, do you want something like that?
1
var c=0, b='#test', a=['first_value','second_value','third_value','fourth_value'];
for(var i=0; i<4; i++)
    if($(b+i).val() == a[i])
        c=1;
if (c) //Do stuff here

This will decrease your code size by 25 bytes;-)

1 Comment

For compact code I would rather recommend using a minifier, like google closure compiler. Writing supoer compact code like this makes the scripts very hard to maintain over time.
1

Demo: just another idea is at http://jsfiddle.net/h3qJB/. Please let me know how it goes.

You can also do chaining like:

$('#test1, #test2, #test3, #test4').each(function(){ //...use this.value here  });

It might be that De Morgan's laws gives you an idea of how to make the logic a bit more compact (although I am not sure what is the specific case or is it as simple as comparing values).

Code

var boolean1 = (($('#test1').val() == 'first_value')||($('#test2').val() == 'second_value'))

var boolean2 = (($('#test3').val()!='third_value')|| ($('#test4').val()!='fourth_value'))

if (boolean1 && boolean2)
    alert("bingo");
else
    alert("buzzinga");

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.