0

请帮助理解我做错了什么:我有 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>

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

我有以下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));
    }
  }

这个函数返回我“未定义”。问题可能出在哪里?

4

3 回答 3

2

您需要从递归中返回值:

else {
    return findParent(selector.prev(a));  // You're missing the 'return' here
}
于 2013-06-27T12:00:21.477 回答
1

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

于 2013-06-27T11:59:33.843 回答
1

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

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

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

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

return findParent(selector.prev(a));
于 2013-06-27T12:00:53.147 回答