未经检查的复选框

时间:2016-12-30 08:38:58

标签: jquery checkbox

首先,不要将此作为重复处理,因为我做了一些尝试&错误,以及在询问之前的研究。我打算从jquery发布值,包括未选中的复选框。我尝试了很多方法,但仍然没有设法使其工作,或者由于我的代码结构或其他原因。这是我目前尝试的尝试之一:



function toggle_tip() {}
$('#l_sync_ul').click(function() {
  if ($('#l_sync_ul').prop("checked") == undefined) {
    $('#l_sync_ul').after('<input type="hidden" name="' + $('#l_sync_ul').attr("l_sync_ul") + '" value=off>')
  } else {
    $('#l_sync_ul').next().remove();
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input name="l_sync_ul" id="l_sync_ul" onclick="toggle_tip('ul_dept')" type="checkbox">
&#13;
&#13;
&#13;

只需忽略&#39; onclicks&#39;属性,因为我用它来切换表格。

4 个答案:

答案 0 :(得分:1)

.prop("checked")只会返回truefalse。当您使用jQuery时,我建议您使用它直接绑定change事件处理程序。

$('#l_sync_ul').change(function() {
  if (!this.checked) {
    $(this).after('<input type="hidden" name="' + $(this).attr("name") + '" value=off>')
  } else {
    $(this).next().remove();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input name="l_sync_ul" id="l_sync_ul" type="checkbox">*Just ignore the 'onclicks' attribute since I'm using it for toggle the table.*

答案 1 :(得分:1)

$('#l_sync_ul').prop("checked")本身是一个布尔值,无需检查undefined

您可以使用checkbox事件监听器跟踪.change

function toggle_tip() {}
$(document).ready(function() {
  $('#l_sync_ul').click(function() {
    if ($('#l_sync_ul').prop("checked")) {
      console.log("Checked");
      $('#l_sync_ul').after('<input type="hidden" name="' + $('#l_sync_ul').attr("l_sync_ul") + '" value=off>')
    } else {
      console.log("Un Checked");
      $('#l_sync_ul').next().remove();
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input name="l_sync_ul" id="l_sync_ul" onclick="toggle_tip('ul_dept')" type="checkbox">

答案 2 :(得分:1)

不是100%确定你想要什么,但这会更好用

$('#l_sync_ul').click(function() {
  if (!$(this).is(":checked")) {
    $(this).after('<input type="hidden" name="' + $(this).attr("name") + '" value=off>')
  } else {
    $(this).next().remove();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input name="l_sync_ul" id="l_sync_ul" type="checkbox">

但是为什么没有隐藏字段并在点击时禁用/启用它?或者更好:如果没有检查它将不会发送。如果您使用的是Ajax,请在服务器或Ajax中处理 -

答案 3 :(得分:0)

根据最新修改,我会替换$(this).next().remove(); with $('input[value=off]').remove();,因此会删除value=off的所有元素。它可能适用于某些情况,反之亦然。见这里:

脚本

$(':checkbox').change(function() {
  if (!this.checked) {
    $(this).after('<input type="hidden" name="' + $(this).attr("name") + '" value=off>')
  } else {
    $('input[value=off]').remove();
  }
});


HTML

<input type="hidden" name="l_sync_ul" value=off>
<input type="checkbox" name="l_sync_ul" id="l_sync_ul" onclick="toggle_tip('ul_dept')">