Попробуйте:
var checkbox = document.getElementById('check');
if (checkbox.checked == true) {
//do nothing
} else {
checkbox.style.display = 'none';
}
<input type="checkbox" id="check" checked>
См. этот дефектный отчет, который они говорят
LWG полагает, что ничто в стандарте не запрещает функциональные объекты, которые изменяют элементы последовательности. Проблема состоит в том, что for_each находится в secion, наделенном правом, "не видоизменяя алгоритмы", и заголовок может сбивать с толку. Ненормативное примечание должно разъяснить это.
Но также и отметьте этого.
Они, кажется, называют это "неизменением", потому что сам for_each не делает exlicitly, изменяют элементы последовательности.
Я думаю, "Не изменяя операции последовательности", означают, что эта операция не изменяет последовательность. Но операция могла изменить контейнерные элементы.
Значение контейнерных элементов и последовательности - разные вещи.
Вполне просто Вы не можете внести изменение, которое могло изменить структуру контейнера. Поэтому в общем случае, изменяя контейнер может делать недействительным используемые итераторы.
Можно изменить элемент, пока он не изменяет структуру контейнера (такую как порядок элементов в контейнере).
[дополнение]
Обратите внимание, что, кажется, существует некоторый беспорядок о for_each
будучи алгоритмом 'неизменения'. Этой запутывающей ситуации подводит итог здесь Stroustrup в опечатках для 4 Печати "Языка Программирования на C++, 3-й Ed". (CPL) говорит следующее о ли for_each
может изменить элементы последовательности (http://www.research.att.com/~bs/3rd_printing5.html):
"
for_each()
алгоритм классифицирован как неизменение, потому что это явно не изменяет последовательность. Однако, если относится последовательность неконстантыfor_each()
может изменить элементы последовательности. Для примера посмотрите использованиеnegate()
в 11,9". (недавнее разрешение стандартов).
CPL первоначально указал, что функциональный или функциональный объект передал for_each
не был разрешен изменить элемент, переданный ему. Однако CPL был записан и первоначально опубликован, прежде чем стандарт был завершен, и по-видимому это ограничение на for_each()
был удален, прежде чем это было завершено.
См. также:
Как litb обозначенный выше, for_each классифицирован как 'не видоизменяющийся алгоритм'
Дубликат 'видоизменения' STL к этому является станд.:: преобразовать.
Так как Вы указали, что знаете, что можно использовать станд.:: преобразуйте, вышеупомянутое действительно становится точкой. Это служит точкой коммуникации людям, которые прочитали Ваш код.
Если я вижу станд.:: for_each, ясно, что независимо от того, что нечто делает, это не изменит контейнер.
Инструкция, за которой я следую, может быть указана:
"Если Вы хотите использовать элементы контейнера, чтобы сделать некоторую задачу, которая не изменяет элементы, использует станд.:: for_each.
Если Вы хотите использовать элементы контейнера, чтобы изменить элементы некоторым системным способом или использовать их в задаче, которая изменит их некоторым способом, использовать станд.:: преобразовать."