【问题标题】:How can i apply and/or remove a CSS class upon user selection on Radiobuttons with JQuery?如何在用户使用 JQuery 选择单选按钮时应用和/或删除 CSS 类?
【发布时间】:2012-01-31 18:39:44
【问题描述】:

我的 Aspx 标记如下。 访问者可以通过选择“获胜问题”单选按钮来选择答案

HiddenFields 包含 TrueFalse

所以如果用户选择 rdAnsBool1 并且 HiddenField1 的值为“True”, JQuery 应该将一个“正确”的 CSS 类添加到 ID = Answer

的父 div

如果用户选择 rdAnsBool1 并且 HiddenField1 的值为“False”,则 JQuery 应向 ID = Answer 的父 div 添加一个“错误”的 CSS 类

<div id="Answer" class="Ans">
   <div id ="Left"> 
   <asp:RadioButton ID="rdAnsBool1" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans1") %>' />
   <asp:RadioButton ID="rdAnsBool2" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans2") %>' />
   <asp:HiddenField ID="HiddenField1" runat="server" Value = '<%# DataBinder.Eval(Container.DataItem, "Ans1Bool") %>'/>
   <asp:HiddenField ID="HiddenField2" runat="server" Value = '<%# DataBinder.Eval(Container.DataItem, "Ans2Bool") %>'/>
   </div>
</div>

JQuery 怎么会这样?

更新。 Answer div 位于 Listview 中。这就是我想绘制父 div 的原因。

又一次更新 我害怕 JQuery...

标记已更改为以下...因此,我为获胜的解决方案提供 200 个边界。

<div id="Answer" class="Ans">
           <div id ="Left"> 
           <asp:RadioButton ID="rdAnsBool1" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans1") %>' />
           <asp:RadioButton ID="rdAnsBool2" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans2") %>' />
           <asp:RadioButton ID="rdAnsBool3" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans3") %>' />
           <asp:RadioButton ID="rdAnsBool4" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans4") %>' />
           <asp:RadioButton ID="rdAnsBool5" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans5") %>' />
           <asp:RadioButton ID="rdAnsBool6" runat="server" Text = '<%# DataBinder.Eval(Container.DataItem, "Ans6") %>' />
           <asp:HiddenField ID="HiddenField1" runat="server" Value = '<%# DataBinder.Eval(Container.DataItem, "Ans1Bool") %>'/>
           <asp:HiddenField ID="HiddenField2" runat="server" Value = '<%# DataBinder.Eval(Container.DataItem, "Ans2Bool") %>'/>
           <asp:HiddenField ID="HiddenField3" runat="server" Value = '<%# DataBinder.Eval(Container.DataItem, "Ans3Bool") %>'/>
           <asp:HiddenField ID="HiddenField4" runat="server" Value = '<%# DataBinder.Eval(Container.DataItem, "Ans4Bool") %>'/>
           <asp:HiddenField ID="HiddenField5" runat="server" Value = '<%# DataBinder.Eval(Container.DataItem, "Ans5Bool") %>'/>
           <asp:HiddenField ID="HiddenField6" runat="server" Value = '<%# DataBinder.Eval(Container.DataItem, "Ans6Bool") %>'/>
           </div>
        </div>

这里是 JsFiddle 部分

http://jsfiddle.net/VTevz/

这件事让我发疯了

【问题讨论】:

    标签: jquery asp.net css


    【解决方案1】:
    // get a reference to radio button and attach change handler
    $('input[id*="rdAnsBool"]').change(function(){
         var container = $(this).closest('div.Ans'),
             questionid = $(this).attr('id'),
             index = questionid[questionid.indexOf('rdAnsBool') + 1];
    
         // test for condition and set classes accordingly ...
         if($(this).val() == $(this).parent()
                                    .find('input[id*="HiddenField' + index + '"]').val()) {
              container.addClass('correct').removeClass('wrong');
              return;
         }
    
         container.addClass('wrong').removeClass('correct');
    });
    

    更新 (确保在浏览器上下文中工作时发布 HTML 标记而不是 ASP 标记)

    http://jsfiddle.net/VTevz/7/

    【讨论】:

    • 您好,感谢您的支持。但是这种解决方案不适用于父 div,而是适用于每个“答案”div,对吗?还是我在这里遗漏了什么?
    • @Chocol8 这是假设你只有 one answer div 因为ids 是独一无二的...
    • @Chocol8 我刚刚使用CSS class name 更新了 multiple answer divs 的答案
    • 我想我必须提出一个新问题,因为我发现每个问题可能有三个以上的单选按钮...
    • 我刚刚更新了我的答案,希望能解决您的问题。如果您发布HTML source 而不是ASP Markup 的sn-p 会有所帮助
    【解决方案2】:
    $('#rdAnsBool1').click(function(e) {
        if ($('#HiddenField1').attr('Value')=='True') {
            $('#Answer').addClass('correct');
        } else {
            $('#Answer').addClass('wrong');
        }
    });
    

    【讨论】:

      【解决方案3】:

      由于您没有对单选按钮进行分组,因此可以同时选择它们。您应该在同名的两个按钮中指定GroupName

      指定名称后,让我们说“答案”,您可以试试这个。

      $('input[name="answers"]').click(function(){
          if($('#HiddenField' + $(this).index()).val().toLowerCase() == "true"){
              $("#Answer").removeClass('wrong').addClass('correct');  
          }
          else{
              $("#Answer").removeClass('correct').addClass('wrong');
          }
      });
      

      【讨论】:

        【解决方案4】:

        确保隐藏的名称与radiobutton 相同,然后就可以了:

        $('input[type=radio]').change(function() {
            if (this.checked == $('input[type=hidden],[name=' + this.name + ']').val()) {
                $(this).closet('#Answer').removeClass('correct').addClass('wrong');
            }
            else {
                $(this).closet('#Answer').removeClass('wrong').addClass('correct');
            }
        });
        

        【讨论】:

        • 你能帮我多说一些确保隐藏的名称与单选按钮相同的名称吗?我不明白你的方法
        • @Chocol8。给我一个带有 HTML 的 JSFiddle,我会调整它。
        • @Chocol8。我无法理解语言(甚至无法识别)而且它的图片链接断开了,而且太长了,请给我你能做到的最短版本。对不起...
        • @Chocol8。它仍然有那种外语。它有 300 多行,而且仍然有断开的链接。我需要最简单的 HTML,并且用 English
        【解决方案5】:

        如果您将隐藏字段的 ClientID 值添加到各自的单选按钮中,这会更容易。您可以在代码隐藏中执行此操作(例如,在单选按钮的预渲染事件中:RadioButton1.Attributes.Add("value", HiddenField1.ClientID))。您可能还应该将 CSSClass 添加到您标记为选择的按钮(即,CSSClass="choice"RadioButton1.Attributes.Add("class", "choice"),具体取决于您是要在标记中还是在代码隐藏中进行)。

        这应该将您呈现的标记更改为&lt;input type="radio" value="ctl00_cphMain_HiddenField1" name="ctl00$cphMain$RadioButton1" id="ctl00_cphMain_RadioButton1"&gt;(或类似的东西)。

        一旦你的标记被修改,你的 jQuery 变成:

        $('input.choice[type="radio"]').click(function () {
            var $this = $(this);         //easy alias.
            var answer = $this.val();   //hidden field id
            var cssClass = '';
            if ($this.attr('checked')) {
                cssClass = $(answer).val().toLowerCase() === 'true' ? 'correct' : 'wrong';
            }
            $this.removeClass('correct').removeClass('wrong').addClass(cssClass).;
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-12
          • 2021-12-06
          • 1970-01-01
          • 1970-01-01
          • 2016-07-12
          • 2014-05-03
          • 2012-09-11
          • 2018-04-13
          相关资源
          最近更新 更多