отключить флажок в группах - PullRequest
1 голос
/ 05 октября 2011

еще раз, мне нужно отключить некоторые флажки в соответствии с другим. Я создаю форму для регистрации участников медицинского съезда. Они могут зарегистрироваться в некоторых группах (каждая группа длится 3 часа), поэтому, если они регистрируются в группе 10 утра (нажав на флажок), они не могут зарегистрироваться в группах 11, 12 утра (они должны быть в состоянии зарегистрироваться в 13:00). , Количество нерегулярных групп в час (3 в 10 часов утра, 2 в 11 часов утра, например) Это часть формы, которую мне нужно «подтвердить»:

<form method="post" action="process.php"></form>
<input type="checkbox" value="101" name="convention1"> 10 am: Cariovascular desease<br>
<input type="checkbox" value="102" name="convention2"> 10 am: Changes on toracic     surgeon<br>
<input type="checkbox" value="103" name="convention3"> 10 am: New drugs on heart<br>
<input type="checkbox" value="111" name="convention4"> 11 am: New drugs on heart (II)     <br>
<input type="checkbox" value="112" name="convention5"> 11 am: Dynamic process on blood pressure<br>
<input type="checkbox" value="113" name="convention6"> 11 am: Aortic disease<br>
<input type="checkbox" value="121" name="convention7"> 12 am: Pulmonar Pressure<br>
<input type="checkbox" value="122" name="convention8"> 12 am: Open table<br>
<input type="checkbox" value="131" name="convention9"> 1 pm: Neurological aspects on  heart rate<br>
<input type="checkbox" value="132" name="convention10"> 1 pm: Cardiovascular disease (II)<br>
<input type="checkbox" value="133" name="convention11"> 1 pm: Mioresponse on heart failure<br>
<input type="checkbox" value="141" name="convention12"> 2 pm<br>
<input type="checkbox" value="142" name="convention13"> 2 pm<br>
<input type="checkbox" value="143" name="convention14"> 2 pm<br>
<input type="checkbox" value="151" name="convention15"> 3 pm<br>
<input type="checkbox" value="152" name="convention16"> 3 pm<br>
<input type="checkbox" value="153" name="convention17"> 3 pm<br>
<input type="submit"></input>
</form>

Как мне это сделать?

Большое спасибо

1 Ответ

0 голосов
/ 05 октября 2011

Если эти флажки являются динамическими, вы можете достичь этого с помощью

  1. Имея структуру данных, которая связывает идентификатор / значение каждого флажка со временем, когда начинается группа.
  2. Наличие других данныхструктура, которая содержит все флажки, которые представляют группы, которые начинаются одновременно.
  3. Добавление прослушивателя событий 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 {}
    }
}

}

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

  1. Пользователь выбирает группу со временем 12 (отключает 10, 11, 12, 13 и 14),
  2. После этогопользователь выбирает проверку со временем 16 (отключает 14, 15, 16, 17)
  3. Если пользователь снимает отметку с группы со временем 12, проверки, начинающиеся во время 14, будут включены обратно, когда их следует отключитьдля того, чтобы группа 16 все еще была выбрана.

Вы можете справиться с этим, проверив другие группы, которые могут повлиять на проверку перед отключением, или снова вызвав функцию checkSelected для всех проверенных времен, чтобыотключите все компоненты, которые должны быть снова отключены.

Кроме того, помните, что этот вид проверок JavaScript должен всегда выполняться на стороне сервера, чтобы пользователи с отключенной js могли их обойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...