是/否按钮

Yes / No button

我正在使用自动表单来询问是或否问题,我想要两个按钮,一个表示是,另一个表示否。通过使用 aldeed:autoform-bs-button-group-input 我可以在我的架构中使用下面的代码生成两个按钮,但这并不能单独设置每个按钮的样式。例如,我想要一个是绿色的,一个是红色的。我怎样才能做到这一点?

路径:Schema.js

answer: {
        type: String,
        optional: true,
        allowedValues: ['Yes', 'No'],
        autoform: {
                type: "select-radio",
                options: function () {
                return [
                {label: "Yes", value: 'Yes'},
                {label: "No", value: 'No'},
                ];
            }
        }
    }

路径:template.js

{{#autoForm collection="questions" id=makeUniqueID doc=this type="update" autosave=true}}      
{{> afQuickField name="answer" type="select-radio" template="buttonGroup" label=false}}
{{/autoForm}}

首先让我们添加一个 class 属性自动表单:

{{#autoForm class="YesNoStyles" collection="questions" id=makeUniqueID doc=this type="update" autosave=true }}      
{{> afQuickField name="answer" type="select-radio" template="buttonGroup" label=false}}
{{/autoForm}}

这会传递给生成的 <form> 标记,我们可以检查它,它看起来像这样:

<form class="YesNoStyles" id="makeUniqueID" novalidate="novalidate">
  <div class="form-group">
    <div class="af-radio-group" data-schema-key="answer">
      <div>
        <label>
          <input type="radio" value="Yes" name="answer" id="6gWEaAr2ZWQzqtj7H"> Yes</label>
      </div>
      <div>
        <label>
          <input type="radio" value="No" name="answer" id="6gWEaAr2ZWQzqtj7H"> No</label>
      </div>
    </div>
    <span class="help-block"></span>
  </div>
</form>

现在有两种选择:

  1. 找到 input[value="Yes"]input[value="No"] 元素,然后将 css 应用于它们的父元素。然而,这不能只用 css 来完成,因为 css 选择器不允许选择父元素。 Meteor 的 onRendered 回调允许我们执行以下操作:

    Template.Question.onRendered(function(){
      $('input[value="Yes"]')[0].parentElement.classList.add('yes');
      $('input[value="No"]')[0].parentElement.classList.add('no');
    });
    

    具有以下定义 css classes:

    .yes {
      background-color: green;
    }
    
    .no {
      background-color: red
    }
    
  2. :nth-child(i) css 选择器,不需要 javascript!

    定义以下css规则(从我在上面添加的class开始):

    .YesNoStyles > div > div > div:nth-child(1) > label  {
      background-color: green;
    }
    
    .YesNoStyles > div > div > div:nth-child(2) > label {
      background-color: red;
    }