0

如果用户对 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');只是设置valuetrue. 有没有办法只得到一个trueattrs数组?

4

1 回答 1

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')
于 2013-07-21T22:15:04.497 回答