Jquery 遍历dom,查找最近的上一个复选框

Jquery 遍历dom,查找最近的上一个复选框,jquery,traversal,Jquery,Traversal,我试图在下面的代码中遍历dom,只是有一个块。我想启用上一个.form输入包装中的复选框 <div> <div class="form-input-wrapper inline-radio-buttons"> <span class="button-label">Setup - Ready</span> <span> <input id="status_0" name="status[0]" typ

我试图在下面的代码中遍历dom,只是有一个块。我想启用上一个.form输入包装中的复选框

<div>
  <div class="form-input-wrapper inline-radio-buttons">
    <span class="button-label">Setup - Ready</span>
    <span>
      <input id="status_0" name="status[0]" type="hidden" value="setup_ready">           
      <input checked="checked" disabled="disabled" id="status_0" name="status[0]" type="checkbox" value="setup_ready">
    </span>
  </div>
  <div class="form-input-wrapper inline-radio-buttons">
    <span class="button-label">Setup - Required</span>
    <span>
      <input id="status_1" name="status[1]" type="hidden" value="setup_required">
      <input checked="checked" disabled="disabled" id="status_1" name="status[1]" type="checkbox" value="setup_required">
    </span>
  </div>
</div>
如果我登录:

$(this).parent().prev().has(':checkbox').first().find(':checkbox')

这个日志将只打印出我点击的元素。

你尝试过<代码> $(这个)吗?直到((elm))< /C> > /p> 你需要上升2个级别,但是我认为最好使用<代码> .CouthSe[(或)代码>指定一个选择器,而不是硬编码代码中的层级数。

首先,使用:

$(this).closest(".inline-radio-buttons").siblings().first().find(":checkbox").prop("disabled", false);
对于前一种情况,请使用:

$(this).closest(".inline-radio-buttons").prev().find(":checkbox").prop("disabled", false);
如果单击,请使用
.removeAttr('checked')

样本:

$('input').bind('click', function () {  
$('.inline-radio-buttons').last().find('input').removeAttr('disabled').removeAttr('checked');
});

我更改了以下内容以使其正常工作:

  • 使用
    最近的
    而不是
    父项
    ,因为它更稳定,因为您可以根据需要进行嵌套
  • 此时不要先使用
    prev
    ,因为
    prev
    将返回
    1
    0
    元素。
    第一个
    不会改变任何内容
  • 在HTML中添加了一个元素,该元素没有
    disabled=“disabled”
  • .disabled=false
    更改为
    .removeAttr('disabled')
    (我认为
    .disabled=false
    不起作用)
jQuery(窗口).ready(函数(){
$(':复选框').live('单击',函数()){
如果($(this).is(':checked'))
返回;
$(this).closest(“.form input wrapper”).prev().has(':checkbox').find(':checkbox').removeAttr('disabled');
返回;
});
});

安装就绪
设置-必需
设置-3

hmm,关闭。这将启用第一个复选框。我尝试将first()替换为prev(),这只是启用了所有复选框。如果您只想使用上一个复选框,请不要使用
同级()。我已经更新了答案。哈!,我刚想出来,打算编辑它:)谢谢你确定你要做的是启用/禁用,而不是选中/取消选中吗?
$('input').bind('click', function () {  
$('.inline-radio-buttons').last().find('input').removeAttr('disabled').removeAttr('checked');
});