Большинство также не знают, что вы можете отличить нажатую кнопку формы, просто задав им пару имя / значение. Например
<form action="process" method="post">
...
<input type="submit" name="edit" value="Edit">
<input type="submit" name="delete" value="Delete">
<input type="submit" name="move_up" value="Move up">
<input type="submit" name="move_up" value="Move down">
</form>
На стороне сервера можно получить фактическую нажатую кнопку, просто проверив наличие параметра запроса, связанного с именем кнопки. Если это не такnull
, значит была нажата кнопка.
Я видел много из ненужных JS хаки / обходные путей для этого, например , изменения формы действия или изменение скрытого входного значения заранее в зависимости от нажатой кнопки. Это просто потрясающе.
Кроме того, я видел почти столько же JS-хаков / обходных решений для сбора отмеченных из нескольких флажков, как в строках таблицы. При каждом выборе / проверке строки таблицы JS будет добавлять индекс строки к некоторому значению, разделенному запятыми, в скрытом элементе ввода, который затем будет разделен / проанализирован на стороне сервера. Это результат незнания того, что вы можете дать нескольким элементам ввода одно и то же имя, но другое значение, и что вы все равно можете получить к ним доступ как к массиву на стороне сервера. Например
<tr><td><input type="checkbox" name="rowid" value="1"></td><td> ... </td></tr>
<tr><td><input type="checkbox" name="rowid" value="2"></td><td> ... </td></tr>
<tr><td><input type="checkbox" name="rowid" value="3"></td><td> ... </td></tr>
...
Незнание даст каждому флажку другое имя и опустит весь атрибут значения. В некоторых ситуациях без JS-взлома / обходного пути я также видел некоторую излишне подавляющую магию в коде на стороне сервера, чтобы различать отмеченные элементы.