jQuery Ajax无法更改复选框状态

时间:2018-07-25 12:39:49

标签: javascript jquery ajax checkbox

我正在尝试更改复选框状态,但似乎不起作用。 这是我的代码:

$.ajax({
  url: 'includes/exproty.php',
  type: 'post',
  data: {
    'product_id': '100'
  },
  success: function(data) {
    var product_details = JSON.parse(data);
    if (product_details.is_published) {
      console.log("Works");
      $("[name='active']").checked = true;
    } else {
      $("[name='active']").checked = false;
    }
  }
});
<div class="input_container">
  <label>Active</label>
  <input type="checkbox" name="active" />
</div>

使用console.log内的if来确认条件是否满足,并执行if内的代码。

我也尝试过:

$("[name='active']").prop('checked', true);

但是它也不起作用。

我肯定知道条件已经满足并且正在执行(由于console.log)。

如果需要更多信息,请索取,我将尝试提供。谢谢!

5 个答案:

答案 0 :(得分:0)

问题是因为jQuery对象没有checked属性。那属于本机Element对象。对于jQuery,您应该改用prop()

如果这对您不起作用,则您可能是AJAX逻辑出错(应检查控制台以进行诊断),或者您有多个具有name="active"属性的元素,在这种情况下,您应该使用其他选择器。

还请注意,您无需手动调用JSON.parse()。 jQuery会自动为您反序列化响应,因此data已经是一个对象。再次反序列化将导致错误。试试这个:

$.ajax({
  url: 'includes/exproty.php',
  type: 'post',
  data: { product_id: '100' }, // consider changing this value to an int
  dataType: 'json', // explicitly set return data type
  success: function(data) {
    $("[name='active']").prop('checked', product_details.is_published);
  }
});

答案 1 :(得分:0)

请尝试使用jQuery attr

if (product_details.is_published) {
     console.log("Works");
     $("[name='active']").attr({'checked':'checked'});
} else {
     $("[name='active']").attr({'checked':''});
}

答案 2 :(得分:0)

您可能正在使用jquery 1.6或更高版本。 尝试这个.. 使用复选框ID: $(window).find("#checkboxid").prop("checked", true);

或使用复选框类(这将应用于所有使用过的类的标签)

$(window).find(".classname").prop("checked", true);

答案 3 :(得分:0)

尝试以下方法,通过测试-应该可以:

$("input[name='active']").attr( "checked", true);
$("input[name='active']").attr( "checked", false);

答案 4 :(得分:0)

使用is_published。它是jQuery特有的,在data: {'product_id': '100',}中包含$.ajax({ url: 'includes/exproty.php', type: 'post', data: { 'product_id': '100', 'product_details' : is_published }, success: function(data) { var product_details = JSON.parse(data); if (product_details.is_published) { console.log("Works"); $("[name='active']").prop('checked', true); } else { $("[name='active']").prop('checked', false); } } });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="input_container">
  <label>Active</label>
  <input type="checkbox" name="active" />
</div>
event