Если эти флажки являются динамическими, вы можете достичь этого с помощью
- Имея структуру данных, которая связывает идентификатор / значение каждого флажка со временем, когда начинается группа.
- Наличие других данныхструктура, которая содержит все флажки, которые представляют группы, которые начинаются одновременно.
- Добавление прослушивателя событий
onchange
к флажкам, которые сначала выяснят, к какому времени относится данный флажок, с помощью структуры данных в (1).Затем с помощью структуры данных в (2) получите все флажки, которые находятся в пределах времени начала затронутого флажка +3, и отключите их все.
Конечно, выможно пропустить (1), передав время начала в качестве аргумента функции, которую вы будете вызывать в обработчике onchange
.
For (2), и, если это подходит, вы можете поместить всефлажки, которые начинаются в данное время x
с <span name="startTimex">
, и получают флажки позже с getElementsByName()
.Это грязно.
Это было бы быстрое и грязное решение:
<span name="startTime10">
<input type="checkbox" value="101" name="convention1" onchange="checkSelected(this, 10)">
10 am: Cariovascular desease
</span>
...
<span name="startTime13">
<input type="checkbox" value="132" name="convention10" onchange="checkSelected(this, 13)">
1 pm: Cardiovascular disease (II)
</span>
....
function checkSelected(check, startTime) {
// For each of the time groups that are to be disabled
for (var i = -2; i < 3; i++) {
var time = "startTime" + (startTime + i);
var elements = document.getElementsByName(time);
for (var j = 0; j < elements.length; j++) {
elem = elements.item(j).childNodes.item(0);
if (elem != check) {
elem.disabled = check.checked;
}
else {}
}
}
}
Пожалуйста, примите во внимание, что эта функция также будет необязательно включать флажки, когдагруппа отменена.Это может быть проблемой, если, например:
- Пользователь выбирает группу со временем 12 (отключает 10, 11, 12, 13 и 14),
- После этогопользователь выбирает проверку со временем 16 (отключает 14, 15, 16, 17)
- Если пользователь снимает отметку с группы со временем 12, проверки, начинающиеся во время 14, будут включены обратно, когда их следует отключитьдля того, чтобы группа 16 все еще была выбрана.
Вы можете справиться с этим, проверив другие группы, которые могут повлиять на проверку перед отключением, или снова вызвав функцию checkSelected
для всех проверенных времен, чтобыотключите все компоненты, которые должны быть снова отключены.
Кроме того, помните, что этот вид проверок JavaScript должен всегда выполняться на стороне сервера, чтобы пользователи с отключенной js могли их обойти.