无法在JQuery递归中返回值

时间:2013-06-27 11:56:45

标签: jquery recursion

请帮助理解我做错了什么: 我有DOM结构:

<div class="wraper">
  <div>
    <input type="checkbox" name="field_regions[und][8260]" value="8260" class="form-checkbox">               
    <label class="option" for="edit-field-regions-und-8260">Europe </label>
  </div>
  <div>
    <input type="checkbox" name="field_regions[und][8260]" value="8260" class="form-checkbox">               
    <label class="option" for="edit-field-regions-und-8260">- East Europe </label>
  </div>
  <div>
    <input type="checkbox" name="field_regions[und][8260]" value="8260" class="form-checkbox">               
    <label class="option" for="edit-field-regions-und-8260">-- Romania </label>
  </div>
</div>

我需要的是找到checked元素的第一个父元素。 (对于罗马尼亚,它将是 - 东欧)。

我跟随JS:

    // Force hierarchy checking.
    var selectors3 = terms.find('.form-type-checkbox');
    for (var i3 = 0, len3 = selectors3.length ; i3 < len3 ; i3++) {
      $(selectors3[i3]).bind('click', function() {              
      var test = findParent(this);
      console.log(test);
      });
    }

  function findParent(a) {
    var selector = $(a).prev();
    if (selector.find('label').text().indexOf('-')) {
      return selector;          
    }
    else {
      findParent(selector.prev(a));
    }
  }

此函数返回“未定义”。问题出在哪里?

3 个答案:

答案 0 :(得分:2)

您需要返回来自递归的值:

else {
    return findParent(selector.prev(a));  // You're missing the 'return' here
}

答案 1 :(得分:1)

我注意到你的输入有课 表单复选框 ,但你的jquery代码使用这个.form-type-checkbox选择器,这是你想要的吗?

答案 2 :(得分:1)

您正在使用类名作为下面一行的表单类型复选框

var selectors3 = terms.find('.form-type-checkbox');

但实际上您的复选框的类名称为form-checkbox

并从递归函数调用返回值,即

return findParent(selector.prev(a));