无法从函数返回值

时间:2013-03-13 11:53:04

标签: javascript jquery

我想从包含匿名函数的函数返回值。

function getSingleCheckedItemId() {
    return $(".data-table-chk-item").each(function() {
      if ($(this).is(":checked")) {
          var value = $(this).attr("value");
          return value;
      }
    });
  }

在这种情况下,它返回所有复选框的数组。如果我删除了第一个return,则不会返回值undefined

那么如何从getSingleCheckedItemId()返回值?

3 个答案:

答案 0 :(得分:5)

.each总是返回包含您迭代的所有元素的jQuery对象,所以:

function getSingleCheckedItemId() {
    var ret;
    $(".data-table-chk-item").each(function() {
      if ($(this).is(":checked")) {
          ret = $(this).attr("value");
          return false; //breaks out of .each
      }
    });
    return ret;
}

此外,this.value通常是比$(this).attr('value')更好的选择,以防您处理表单输入 - 看起来您有radio / checkbox输入checked财产。此外,this.checked返回一个布尔值,因此也不需要$(this).is(':checked')


我相信你的逻辑可以简化为:

function getSingleCheckedItemId() {
    return $(".data-table-chk-item:checked").val();
}

这种方式.val()将返回第一个:checked项或undefined的值,如果选择器没有匹配任何元素,则与上面的循环相同。

答案 1 :(得分:2)

你可以这样做:

function getSingelCheckedItemId() {
    var elements = $(".data-table-chk-item:checked");
    return (elements.length > 0) ? $(elements[0]).val() : undefined;
}

答案 2 :(得分:1)

我会这样做

function getSingleCheckedItemId() {
    var ret;
    $(".data-table-chk-item").each(function() {
        if ($(this).is(":checked")) {
            ret = $(this).attr("value");
        }
    });
    return ret;
}