jQuery / CoffeeScript:如果所有无线电均为假,则隐藏div,但显示是否为真

时间:2013-07-21 21:39:49

标签: jquery coffeescript

如果用户对4个问题中的任何一个回答“是”(点击“True”无线电),我需要显示div。但如果他们对所有人都回答错误,那么隐藏div。我一直遇到的问题是,如果用户改变主意并返回并在任何问题上选择其他选项。我已经编写了这个CoffeeScript方法来处理它:

$ ->
  numberFalse = 0
  numberTrue = 0
  hideIfAllNo = ->
    $('.legal-information').find('input[type=radio]').each ->
      if $(this).is(':checked') and $(this).val() is 'false'
        if numberFalse >= 4 then return else numberFalse += 1
        if numberTrue >= 1 then numberTrue -= 1 else numberTrue = 0
      else if $(this).is(':checked') and $(this).val() is 'true'
        if numberTrue >= 4 then return else numberTrue += 1
        if numberFalse >= 1 then numberFalse -= 1 else numberFalse = 0
    if numberFalse is 4
      $('.legal-info-extra-info').slideUp('fast')
    if numberTrue >= 1
      $('.legal-info-extra-info').slideDown('fast')

  $('.legal-information input[type=radio]').on 'change', ->
    hideIfAllNo()

这里的问题(除了一些可能有问题的样式选择;也可以自由地权衡这些)是用户可以通过在...上来回点击来增加numberFalsenumberTrue单个问题的2个单选按钮。此时,或者如果他们返回并对多个问题做出不同的选择,计数就会搞砸。我曾考虑将元素附加到数组并计算数组长度,但很快就会变得混乱。我该如何处理用户改变他/她的想法?

修改

我尝试将true和false值存储在对象的属性中,但调用$('.legal-information').find('input[type=radio]:checked').attr('value','true');只需将value设置为true。有没有办法获得true attrs的数组?

1 个答案:

答案 0 :(得分:2)

这些局部变量是否存在其他地方使用的真假无线电数量?如果不是,您可以跳过此总和,并在任何true上显示此div,如下所示:

$ ->
  $('.legal-information input[type=radio]').on 'change', ->
    if $('.legal-information input[type=radio][value=true]:checked').length  > 0
      $('.legal-info-extra-info:hidden').slideDown('fast')
    else
      $('.legal-info-extra-info:visible').slideUp('fast')
相关问题