【问题标题】:jquery - check/uncheck customized checkbox with hidden inputjquery - 选中/取消选中带有隐藏输入的自定义复选框
【发布时间】:2018-09-11 22:01:45
【问题描述】:

我在 HTML

中有这个
<div class="my-checkbox">
    <label>I do agree</label>
    <input type="hidden" name="agreement" value="0">
</div>

这在 jQuery

$('.my-checkbox').on('click', function()
{
    if($(this).children('[type="hidden"]').val() == 0)
    {
        $(this).children('[type="hidden"]').val(1);
        $(this).addClass('active');
    }
    else
    {
        $(this).children('[type="hidden"]').val(0);
        $(this).removeClass('active');
    }
});

当我单击.my-checkbox 时,它会将值更改为1 并添加类active,当我再次单击它时,反之亦然。它可以正常工作,但是在移动设备中,当我单击它时它会更改值并设置为 active 但是当我再次单击它时,它会更改值但 active 类不会删除。我怎么知道?只需双击并提交表单,结果是 => 您应该同意协议。

谢谢

【问题讨论】:

  • 你能试试“改变”而不是“点击”吗?'
  • 我想要的事件是点击 div 并更改输入值。
  • 嗯,你为什么不使用复选框?您正在彻底改造复选框.....
  • 反正改成'change'还是不行
  • 我对 div @epascarello 有自己的风格

标签: javascript jquery checkbox input hidden


【解决方案1】:

当它是一个简单的 CSS 来更改样式以使其以相同的方式工作时,重新发明复选框是没有意义的。没有添加/删除类。无需 JavaScript,只需一个简单的 CSS 选择器。

#agree + label {
   color: red
}

#agree:checked + label {
   color: green
}
<div class="my-checkbox">
    <input type="checkbox" id="agree" name="agreement" hidden>
    <label for="agree" >I do agree</label>
</div>

现在为什么你的代码不起作用?

if($(this).children('[type="hidden"]').val() == 0)  <-- If zero
{
    $(this).children('[type="hidden"]').val(0);  <-- set zero

您没有切换到 1。您的逻辑颠倒了。

【讨论】:

  • 添加一个必需的属性,一切都很完美
  • 否,因为我一直在修改0到1之间错误的代码。我编辑了它。因为我的代码中必须有很多修改,所以我不能这样做。但是我发现了一些东西,当我单击复选框(即 div)时,再次单击它并单击另一个元素(如输入),它会显示更改。所以我认为如果我在将元素设置为活动后设置焦点,它将起作用。不是吗?现在我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2011-03-18
相关资源
最近更新 更多