单击时复选框输入未检查(CSS切换开关样式)

时间:2016-03-03 05:19:47

标签: javascript jquery html css checkbox

我使用custom CSS toggle switch来设置复选框输入的样式。 GitHub Project

但是,当您单击其中一个复选框切换时,它会将点击两次注册,并且永远不会更改选中的值。如果取消选中该复选框,它将保持未选中状态。如果它开始检查,它将保持检查状态。

我做了一个小提示来证明这个问题:https://jsfiddle.net/w1ug4jdc/

样式化复选框的HTML如下所示:

<label class="switch-light switch-candy" onclick="doSomething($(this));">
  <input type="checkbox" />

  <strong>
    Wireless
  </strong>

  <span>
    <span>Off</span>
    <span>On</span>
    <a></a>
  </span>
</label>

这是完成所有样式的CSS文件:https://github.com/ghinda/css-toggle-switch/blob/master/dist/toggle-switch.css

3 个答案:

答案 0 :(得分:2)

  

使用.prop()而非.attr()用于checked状态,因为checked是元素的属性,不使用内联事件绑定。

另请参阅.prop() vs .attr()

试试这个:

&#13;
&#13;
$('.switch-light.switch-candy').on('click', function() {
  $('#updates').append('<p>checked=' + $(this).find('input').prop('checked') + '</p>');
})
&#13;
<link href="https://merkd.com/engine/ui/themes/lux/assets/css/toggle-switch.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<label class="switch-light switch-candy">
  <input type="checkbox" />

  <strong>
    Wireless
  </strong>

  <span>
    <span>Off</span>
  <span>On</span>
  <a></a>
  </span>
</label>

<div id="updates"></div>
&#13;
&#13;
&#13;

Fiddle

将事件绑定到input元素并获取输入特定值:

&#13;
&#13;
$('.switch-light.switch-candy input').on('click', function() {
  $('#updates').append('<p>checked=' + this.checked + '</p>');
})
&#13;
<link href="https://merkd.com/engine/ui/themes/lux/assets/css/toggle-switch.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<label class="switch-light switch-candy">
  <input type="checkbox" />

  <strong>
    Wireless
  </strong>

  <span>
    <span>Off</span>
  <span>On</span>
  <a></a>
  </span>
</label>

<div id="updates"></div>
&#13;
&#13;
&#13;

Updated Fiddle

答案 1 :(得分:0)

将onclick事件附加到输入而不是标签: https://jsfiddle.net/w1ug4jdc/1/

  <input type="checkbox" onclick="$('#updates').append('<p>checked='+$(this).find('input').attr('checked')+'</p>');" />

(但如上所述,不要使用内联事件)

答案 2 :(得分:0)

似乎jQuery没有读取“已检查”属性。

尝试使用:checked selector

$("label").click(function(){
  $('#updates')
    .append('<p>checked='+$(this).find(':checkbox').is(':checked')+'</p>');
})
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<label onclick="">
  <input type="checkbox" />
</label>

<div id="updates"></div>