How to change input border-color, with jQuery, depending on its value?

54,973

Solution 1

Just trigger the event:

$("input").change(function() {
    // ...
}).trigger("change");

DEMO: http://jsfiddle.net/9B5SX/1/

Solution 2

I'd suggest:

$('input').on('change', function(){
    var v = parseInt(this.value, 10);
    $(this).css('border', function(){
        if (v < 7) {
            return '5px solid #f00';
        }
        else if (v == 7) {
            return '5px solid #0f0';
        }
        else if (v > 7) {
            return '5px solid #f90';
        }
        else {
            return '5px solid #000';
        }
    });
}).change();

JS Fiddle demo.

Though honestly, given that every situation seems to require a border-width of 5px and border-style of solid, I'd set those parts in the CSS:

input {
    border-width: 5px;
    border-style: solid;
}

And simply update the border-color in the jQuery:

$('input').on('change', function(){
    var v = parseInt(this.value, 10);
    $(this).css('border-color', function(){
        if (v < 7) {
            return '#f00';
        }
        else if (v == 7) {
            return '#0f0';
        }
        else if (v > 7) {
            return '#f90';
        }
        else {
            return '#000';
        }
    });
}).change();

JS Fiddle demo.

And, finally, just because I sometimes can't help myself (and while this approach can be taken, it's not one I can honestly recommend...), with added conditional operators:

$('input').on('change', function(){
    var v = parseInt(this.value, 10);
    $(this).css('border-color', function(){
        var v = parseInt(this.value,10);
        return isNaN(v) ? '#000' : v < 7 ? '#f00' : v == 7 ? '#0f0' : '#f90';
    });
}).change();

JS Fiddle demo.

References:

Solution 3

Same issue here. On my case, the input was a table column and it was displayed for every table row. With the next code I managed to change only one input color, not all when I changed the value for one.

         $('input[type=number]').each(function () {

             /* Change border color depending on the input value */
             var value = parseInt(this.value, 10);
             if (value != 0) {
                 $(this).css('border-color', function () {
                     return value ? 0 : '#bfbfbf', '#f32d83';

                 });

             }
             else {
                 $(this).css('border-color', '#bfbfbf');
             }

         });

Hope it helps

Share:
54,973
Lasha
Author by

Lasha

Updated on May 11, 2020

Comments

  • Lasha
    Lasha about 4 years

    I have question about jQuery. I have code below which works fine; it changes input border-color depending on its value, which is typed and entered. But if in input's value on page-load it does not change that border-color. How can I make the border-color change from the beginning, following page-load?

    Thank you :)

    <input type="text" class="col" value="">
    
    
    // When the <input>'s value changes
    $("input").change(function() {
    
    // If the value is less than 7, add a red border
    if ($(this).val() < 7) {
        $(this).css("border", "5px solid red");
    }
    
    // Else if the value is equal to 7, add a green border
    else if ($(this).val() == 7) {
        $(this).css("border", "5px solid green");
    }
    
    // Else if the value is greater than 7, add an orange border
    else if ($(this).val() > 7) {
        $(this).css("border", "5px solid orange");
    }
    
    // Else if the value is anything else, add a black border
    else {
        $(this).css("border", "5px solid black");
    }
    
    });
    
  • Sikshya Maharjan
    Sikshya Maharjan about 11 years
    It is if the value could conceivably be NaN after the parseInt(), never trust your users, after all (though I did hesitate to retain the else for the same reason).
  • VisioN
    VisioN about 11 years
    No no, I am not about NaN, I mean leave return '#000' simply without else :)
  • Sikshya Maharjan
    Sikshya Maharjan about 11 years
    Oh! I see what you mean, yes; in that case the return would only be executed/encountered if no other conditions were met...gosh, I should go get some sleep... :D
  • VisioN
    VisioN about 11 years
    It's time for Eurovision now ;)
  • Sikshya Maharjan
    Sikshya Maharjan about 11 years
    Well, sleep it is, then! ;)
  • Lasha
    Lasha about 11 years
    VisioN & David thank you for replys... But i have another problem... Your codes both are working on fiddle... But when i copy it to my file, does not work... I included jquery-1.9.1.min.js and everything did perfect on code but it doesn't work anyway :((( what should i do???
  • Sikshya Maharjan
    Sikshya Maharjan about 11 years
    What's different in your page? Is your jQuery wrapped in a $(document).ready(function (){/* your code in here */});
  • Lasha
    Lasha about 11 years
    David Thomas O my god... Shame to me :D:D:D:D Yes i missed that part :D:D Now everything is perfect!!! Thank you very much!!!