为什么这些复选框值会反转?

时间:2016-12-14 04:11:13

标签: javascript jquery

我有一个复选框列表。加载页面时,有些是已选中,有些则未加载。当用户点击复选框时,我有一个jQuery函数,用于检查是否选中了所选的复选框。

问题是当未选中复选框时,我得到肯定的结果,反之亦然。这是HTML的一个例子:

<input type="checkbox" class="update-member">
<input type="checkbox" class="update-member" checked>

这是javascript:

updateMembership : function (e) {
    e.preventDefault();
    if ($(this).prop('checked')) {
        console.log('Checked!');
    } else {
        console.log('NOT Checked');
    }
}

例如,当用户点击第一个复选框时,它会显示“已检查!”#39;在控制台中。

也许我的想法是逆转了?不是javascript?

2 个答案:

答案 0 :(得分:0)

这个答案有点推测,但对你的观察的一个解释是,复选框实际上是按你认为正在使用的顺序呈现的。如果带有checked属性的复选框出现在左侧(第一个),而没有任何属性的复选框出现在右侧,那么您的观察结果实际上是有意义的。

如果您向我们展示您的CSS,我们可以通过更仔细地查看布局来确认这一点。

答案 1 :(得分:0)

我想当你使用时:

if ($(this).prop('checked'))

...它始终会返回true,因为它会将自己报告为现有属性,而不是是否主动检查。

Snippet使用此条件:

if ($(this).is(':checked'))

...它返回一个布尔值,反映了复选框的:checked状态。 不确定e.preventDefault()使用复选框的用途,所以我删除了它。

<强>段

&#13;
&#13;
$('.update-member').on('click', updateMembership);


function updateMembership(e) {
  if ($(this).is(':checked')) {
    console.log('Checked!');
  } else {
    console.log('NOT Checked');
  }
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" class="update-member">
<input type="checkbox" class="update-member" checked>
&#13;
&#13;
&#13;