2013-03-13 5 views
1

Я хочу вернуть значение из функции, которая содержит анонимную функцию.Невозможно вернуть значение из функции

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

В этом случае он возвращает мне массив всех флажков. Если я удалю первый return, он не вернет значение, но undefined.

Итак, как мне вернуть значение от getSingleCheckedItemId()?

+1

попробуйте использовать 'filter' вместо' each'. Или 'map', если вам определенно нужно захватить значение. –

+0

@ dystroy, может быть. Но я думаю, что он может узнать больше, нажав на документы для этих функций. Также у меня нет времени прямо сейчас, чтобы проверить импланты jQuery ... –

ответ

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, если ни один из элементов не соответствует селектором, который делает то же самое как цикл выше.

+0

вам не нужно: 'var ret = $ (this) .attr (" value ");' под этой функцией ... just 'ret = $ (this) .attr ("value"); ':) – 2013-03-13 11:56:21

+1

@ZlatanO. О, черт возьми, это забыл, спасибо! –

2

Вы можете сделать это:

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

Я хотел бы сделать это как этот

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

Ум объясняет, что «неправильно» с возвратом false? –

+0

Не возвращает ли ложь из getSingleCheckedItem и возвращает false вместо значения ret? – HeremansY

+0

Нет, 'return false' не влияет на возвращаемое значение' .each', и этот ответ не использует возвращаемое значение '.each'. '=]' Он вырывается из. http://jsfiddle.net/ult_combo/4xqFG/1/ –

Смежные вопросы