大多数人也不知道您可以通过给它们一个名称/值对来区分所按下的表单按钮。例如
<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 hacks /解决方法来收集多个复选框的已选中复选框。每次对表行进行选择/检查时,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>
...
如果不了解,则会为每个复选框指定一个不同的名称,并忽略整个value属性。在某些JS-hack / free-around情况下,我还看到服务器端代码中不必要的压倒性魔术来区分已检查项目。