将类添加到select元素的选定选项

时间:2010-11-16 20:06:51

标签: asp.net jquery

为了证明我甚至可以在选项elem上使用Class属性,我尝试将类属性添加到静态页面中选择元素的选项,并且工作正常。我注意到没有多少在线资源记录下来,所以我想我会明确设置记录。

这是尝试将类添加到所选选项的jquery代码

 ChangeDdlItemBG : function(obj, compLev)
{
    var ddl = $(obj);
    var index = ddl.attr('selectedIndex');
    switch(compLev)
    {
        case ComplianceLevel.Compliant : 
            $(ddl.attr('id') + ': selected').addClass('Compliant');
            break;
        case ComplianceLevel.OtherThanSerious : 
            $(ddl.attr('id') + ': selected').addClass('OtherThanSerious');
            break;
        case ComplianceLevel.Serious : 
            $(ddl.attr('id') + ': selected').addClass('Serious');
            break;
        case ComplianceLevel.Critical : 
            $(ddl.attr('id') + ': selected').addClass('Critical');
            break;
    }
}

var ComplianceLevel =
{
    Compliant : function() { return 0; },
    OtherThanSerious : function() { return 1; },
    Serious : function() { return 2; },
    Critical : function() { return 3; },
};

新信息,我发现没有发生的原因是compLev传入的值中的一个简单错误。但是,现在它会运行正确大小写的代码,并且对项目的颜色没有任何作用。

2 个答案:

答案 0 :(得分:1)

您当然可以减少冗余。

此外,您必须运行这些函数,以便将它们的返回值与compLev进行比较:

function(obj, compLev) {

    var optClass = "";

    switch (compLev) {
    case ComplianceLevel.Compliant() : 
        optClass = 'Compliant';
        break;
    case ComplianceLevel.OtherThanSerious() : 
        optClass = 'OtherThanSerious';
        break;
    case ComplianceLevel.Serious() : 
        optClass = 'Serious';
        break;
    case ComplianceLevel.Critical() : 
        optClass = 'Critical';
        break;
    }

    $(obj).find("option:selected").addClass(optClass).siblings().removeClass();

}

答案 1 :(得分:0)

看起来您的选择器有拼写错误。除非ddl.attr('id')是一种元素,否则您的代码不会向任何内容添加类。我想你想要$('#' + ddl.attr('id') + ':selected')