【问题标题】:How to get checkboxes to behave like radio buttons with using the same name如何使复选框的行为类似于使用相同名称的单选按钮
【发布时间】:2018-08-07 23:20:01
【问题描述】:

$("input[name='yesFollowup']").on(element_click, function(e){
            if($(this).attr("id") == "yesFollowup"){
                $(".phone_number_yes").show();
            }else{
                $(".phone-number").hide();   
            }
        });

        $('input.followUp:checkbox').on('change', function() {
            $('input.followUp:checkbox').prop({
                'checked': false,
                'disabled': false
            }).removeClass('active');
            $(this).prop({
                'checked': true,
                'disabled': true
            }).addClass('active');
        });
input[type=checkbox] {
    position: relative;
    width: 22px;
    height: 22px;
    border: 1px solid #fff;
    vertical-align: -5px;
    color: #fff;
}

input[type=checkbox] {
    -webkit-appearance: none;
    -moz-appearance: none;
}

[type=checkbox], [type=radio] {
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    padding: 10px;
    margin-left: 8px;
    margin-right: 20px;
}

input[type=checkbox]::before {
    content: "✔";
    position: absolute;
    font-size: 1.2em;
    right: 0;
    top: -0.3em;
    color: #ffffff;
    visibility: hidden;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
.col-sm-2.dealer-item#dealer-item-b.flex-container
    

                    .radio-like-checkboxes(data-validation='required').form-check
                            label(for="yesFollowup")= __('YES')
                            input#yesFollowup(type="checkbox",name='yesFollowup', value="yes", data-value='phone_number_yes')  

                    .radio-like-checkboxes.form-check
                            label(for="noFollowup")= __('NO')
                            input#noFollowup(type="checkbox",name='noFollowup', value="no")

目前两个复选框都是“可检查的”,但我希望一次只检查一个,并在填充另一个复选框时删除另一个复选框。

此外,我不确定如何确保“电话”字段仅在填充“是”框时显示,而在填充“否”框时隐藏。

【问题讨论】:

  • 为什么不只使用单选按钮?
  • 使用最语义化的元素极大地提高了整体的可访问性和可用性。如果某个东西像一个按钮,它应该使用button 元素而不是aspan 等。表单元素也是如此。如果某物的行为类似于无线电输入数组,则应使用无线电input 元素。
  • 在这种情况下,您应该使用收音机本身。同样,正如我所看到的,您是否要提交表单,该值取自输入名称,并且具有两个复选框并检查启用/检查的条件并根据它获取值是没有意义的。

标签: jquery css forms pug


【解决方案1】:

为什么不使用 CSS 来使用看起来像复选框的单选按钮?

优点是根本没有代码,因为...而且单选按钮已经存在排他性行为...所以使用它。没有什么能阻止你用复选标记让它们看起来是方形的。

关于电话号码...使用单选值比较来切换电话输入的显示。

$("[name='call']").on("click",function(){
    $(".phone").toggle($(this).val()=="yes");
});
.container{
  background:#000;
  color:#fff;
  height:1.8em;
  padding:0.2em;
}

input[type='radio'] {
  position: relative;
  width: 22px;
  height: 22px;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  padding: 10px;
  margin-left: 8px;
  margin-right: 20px;
  opacity:1;
}

/* The square box */
input[type='radio']:before {
  content: "";
  position: absolute;
  font-size: 1.2em;
  right: 0;
  top: 0;
  width:1.3em;
  height:1.3em;
  color: #888;
  border:1.2px solid black;
  border-radius:3px;
  background:#fff;
}

/* The checkmark */
input[type='radio']:checked:after {
  content: "✔";
  position: absolute;
  font-size: 1.6em;
  right: 0.15em;
  top: -0.2em;
  color: #000;
}

.phone{
  transform: translateY(-0.4em);
  display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  Yes <input type="radio" name="call" value="yes"> No<input type="radio" name="call" value="no"> <input type="text" class="phone" name="phone" placeholder="Your phone #">
</div>

【讨论】:

  • 另外,使用这种方法你不必关心控件的状态和事件处理
  • 不幸的是,这个解决方案不起作用。我正在与要求我们不要使用任何重复名称的后端开发人员合作。我认为它在进行测试时会返回错误。
  • 再次与您的后端开发人员交谈...我认为他谈论的是id而不是name。这就是无线电输入的工作方式......所以这是有效的标记。
  • 我也是这么想的。我认为这是因为每个 ID 和值都不同,所以这无关紧要。他向我保证确实如此。 :(
  • 好的...然后问你开发者为什么MDN在this example中对3个无线电输入使用相同的名称? -- 我要说的是,这就是无线电输入的工作方式。 name 用于提交用户选择...并且只会发送一个与名称关联的值,即选中的值。 -- 那是基本的 HTML。
猜你喜欢
  • 2014-12-12
  • 2014-06-24
  • 2014-12-15
  • 2011-08-15
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多