如何动态修改jQuery多选下拉背景颜色?

时间:2014-10-01 21:04:36

标签: javascript jquery forms

我有多个选择下拉列表,其背景颜色我试图显示为红色或绿色表示“已确认”或“未确认”两者1)在页面加载时根据选择的选项,以及2)更新背景颜色每个选择框都在变化。

目前在页面加载时,两个选择框都显示绿色确认的背景颜色,就好像它正在评估第一个而不是评估第二个“未确认”选定的下拉列表以添加红色背景颜色 - 我尝试将其包装在每个()中似乎工作。

如何获得第二个选择以在加载和更改时应用正确的背景颜色?我的代码下面是不正确的吗?

谢谢!

<select class="rez">                    
    <option value="Not Confirmed">Not Confirmed</option>
    <option value="Confirmed" selected="selected">Confirmed</option>
</select>

<select class="rez">                    
    <option value="Not Confirmed" selected="selected">Not Confirmed</option>
    <option value="Confirmed">Confirmed</option>
</select>

$(function(){
       $('.rez').each(function(){
            if($('.rez option:selected').val() == 'Confirmed'){
                $('.rez').css('background-color', 'green');
            }

            if($('.rez option:selected').val() == 'Not Confirmed'){
                $('.rez').css('background-color', 'red');
            }
        });             

        $('.rez').change(function() {
            if ( $('.rez option:selected').text() == 'Confirmed') {
                $('.rez').css('background-color', 'green');
            }
            if ( $('.rez option:selected').text() == 'Not Confirmed') {
                $('.rez').css('background-color', 'red');
            }
        });
});

4 个答案:

答案 0 :(得分:2)

我认为你正在寻找这个:

$('.rez').each(function () {
    if ($('.rez option:selected').val() == 'Confirmed') {
        $('.rez').css('background-color', 'green');
    }

    if ($('.rez option:selected').val() == 'Not Confirmed') {
        $('.rez').css('background-color', 'red');
    }
});

$('.rez').change(function () {
    if ($(':selected', this).text() == 'Confirmed') {
        $(this).css('background-color', 'green');
    }
    if ($(':selected', this).text() == 'Not Confirmed') {
        $(this).css('background-color', 'red');
    }
}).trigger('change');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="rez">
    <option value="Not Confirmed">Not Confirmed</option>
    <option value="Confirmed" selected="selected">Confirmed</option>
</select>
<select class="rez">
    <option value="Not Confirmed" selected="selected">Not Confirmed</option>
    <option value="Confirmed">Confirmed</option>
</select>

您不需要在函数中使用选择器。相反,您可以使用this

答案 1 :(得分:0)

将您的jquery代码更新为:

$(function(){
   $('.rez').each(function(){
        if($(this).val() == 'Confirmed'){
            $(this).css('background-color', 'green');
        }

        if($(this).val() == 'Not Confirmed'){
            $(this).css('background-color', 'red');
        }
    });             

    $('.rez').change(function() {
        if ($(this).val() == 'Confirmed') {
            $(this).css('background-color', 'green');
        }
        if ( $(this).val() == 'Not Confirmed') {
            $(this).css('background-color', 'red');
        }
    });
});

答案 2 :(得分:0)

您需要修复一些位,例如在.each()循环和click事件处理程序中使用错误的选择器。

此外,您的代码可以恢复为:

&#13;
&#13;
$(function () {
    // A single function to toggle the background color.
    function toggleBackground() {
        $('.rez').each(function (ix, el) {
            // Toggle the color based on the selected value.
            $(this).css('background-color', $(this).val() == 'Confirmed' ? 'green' : 'red');
        });
    }
    
    // Work out the initial background color.
    toggleBackground();
    
    // If any select changes, toggle its background color.
    $('.rez').on('change', toggleBackground);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="rez">
    <option value="Not Confirmed">Not Confirmed</option>
    <option value="Confirmed" selected="selected">Confirmed</option>
</select>
<select class="rez">
    <option value="Not Confirmed" selected="selected">Not Confirmed</option>
    <option value="Confirmed">Confirmed</option>
</select>
&#13;
&#13;
&#13;

Demo (jsFiddle)

答案 3 :(得分:0)

您应该将.rez的引用更改为$(this)。这样做将确保它检查.rez的每个实例,而不是检查页面上的第一个实例,这就是您的代码现在失败的原因。

代码应该像这样结束

$('.rez').each(function(){
   if($(this).val() == 'Confirmed'){
        $(this).css('background-color', 'green');
   }
   else
   {
        $(this).css('background-color', 'red');
   }
});             


$('.rez').change(function() {
    if ($(this).val() == 'Confirmed') {
         $(this).css('background-color', 'green');
    }
    else
    {
         $(this).css('background-color', 'red');
    }
});