2013-07-17 3 views
1

выхода из хромированной консолиJavascript возвращаемая ошибка

z = selected_sheet() 

возвращает

5 
undefined 

...

г

возвращается

undefined 

JavaScript код

function selected_sheet(){ 
     $('.sheet_radio').each(function(){ 
      if (this.checked == true){ 
       var x = 5; 
       console.log(x); 
       return x; 
      }; 
     }); 
    }; 

Так я получаю правильный выход из журнала консоли, но г не приготовьтесь к тому же пункту, который был возвращен из console.log.

+2

Задать вопрос о создании сообщения. –

+0

Итак, 'console.log' внутри' each' успешно возвращает '5'? – Shawn31313

ответ

1

Это потому, что одновременно может быть выбран только один из переключателей. Я расскажу об этом через минуту.

Так вот код:

function selected_sheet(){ 
     $('.sheet_radio').each(function(){ 
      if (this.checked == true){ `Entry Point` 
       var x = 5; 
       console.log(x); 
       return x; 
      }; 
     }); 
    }; 

если переключатель выбран элемент управления входит в если условие Entry Point и, следовательно, вы получите результат, как пять,

, но, если кнопка радио не выбран, элемент управления не проходит через Entry Point, потому что условие if не работает, и функция возвращает undefined.

Дайте мне знать, если возникнут какие-либо вопросы.

+0

@ пользователь2434674 делает это ответ на ваш вопрос? – user2580076

+0

Спасибо, большое объяснение. – user2434674

+0

Добро пожаловать :) – user2580076

1

Проблема

Это происходит потому, что функция, которая выполняется .each возвращает только из сферы действия этой функции. Он не возвращается с selected_sheet.

В самом деле, если вы в явной форме сделать функцию передается каждому в явной форме возвращает значение, то вы заметите, что г фактически не не устанавливалось:

function selected_sheet() { 

    $('.sheet_radio').each(function() { 
     return 5; 
    }); 
    // nothing is actually being returned 

}; 

z = selected_sheet(); // z is undefined 

Решения

Одним из решений являются стандартным набором значение х во внешнем объеме (или оставить его не определено), а затем установить значение х на новое значение, если переключатель проверяется

function selected_sheet() { 

    var x = 7; // set default to 7 


    $('.sheet_radio').each(function() { 

     if (this.checked == true) { 
      x = 5; // set to new value 
      console.log(x); 
      return false; // stop iterating 
     } 

    }); 

    return x; 
}; 

Другой метод заключается в запроса с селекторов, чтобы увидеть или нет проверяются радиокнопки:

function selected_sheet() { 
    if($('.sheet_radio:checked').length > 0) { 
     return 5; 
    } else { 
     return 7; // this is the default if nothing is checked 
    } 
} 

Наконец вот чистый раствор JavaScript:

function selected_sheet() { 
    if(document.querySelector('.sheet_radio:checked') !== null) { 
     return 5; 
    } else { 
     return 7; // this is the default if nothing is checked 
    } 
} 

и немногословный версия

function selected_sheet() { 
    return document.querySelector('.sheet_radio:checked') !== null? 5 : 7; 
} 
Смежные вопросы