我写一个剧本,我提供两个按钮“授权”和“撤销”给用户。 问题是,他们两个都设置与“授权”按钮总是优先。
下面是示例代码
<form name="form_access" id="form_access" action="" method="POST" class="access">
|
|
|
<input type="hidden" name="accessaction" value="Grant Access"/>
<input type="hidden" name="revokeaction" value="Revoke Access"/>
<a id="_access_btt" class="button" href="#">Grant Access</a>
<img class="ajaxload" style="display:none;" id="ajaxld" src="images/ajax-loader.gif"/>
<a id="_revoke_btt" class="button" href="#">Revoke Access</a>
<img class="ajaxload" style="display:none;" id="ajaxld1" src="images/ajax-loader.gif"/>
</form>
而不是使用两个隐藏的元素,你为什么不使用一个隐藏的元素,像这样的东西吗?
例如:你可以使用:
<input type="hidden" name="accessPermission" value=""/>
并且根据哪个按钮用户点击,用JavaScript的,你可以设置此动作的价值也帮助:
document.form_access.accessPermission.value = "Revoke Access"
和
document.form_access.accessPermission.value = "Grant Access"
然后提交表单!
所以到最后,你可以检查值$ _REQUEST [“accessPermission”]在你的PHP,
你会得到什么价值你已经为你的隐藏表单元素accessPermission设置:
如果它的值是撤销访问,您将获得$ _REQUEST [“accessPermission”]为“撤销访问权”
如果它的值是授权访问,您将获得$ _REQUEST [“accessPermission”]为“授予访问权”
所以在最后,您可以构建您的形式:
<form name="form_access" id="form_access" action="" method="POST" class="access">
|
|
|
<input type="hidden" name="accessPermission" value=""/>
<a id="_access_btt" class="button" href="javascript:document.form_access.accessPermission.value = 'Grant Access'">Grant Access</a>
<img class="ajaxload" style="display:none;" id="ajaxld" src="images/ajax-loader.gif"/>
<a id="_revoke_btt" class="button" href="javascript:document.form_access.accessPermission.value = 'Revoke Access'">Revoke Access</a>
<img class="ajaxload" style="display:none;" id="ajaxld1" src="images/ajax-loader.gif"/>
</form>
并且两个值被设定,因为其真正具体由行设置:
<input type="hidden" name="accessaction" value="Grant Access"/>
<input type="hidden" name="revokeaction" value="Revoke Access"/>
格兰特行动优先,因为这是第一次出现。
<input type="submit" name="accessaction" value="Grant Access"/>
<input type="submit" name="revokeaction" value="Revoke Access"/>
要检查是否授权访问被按下,可以检查isset($_POST['accessaction'])
要检查是否撤消访问权限被按下,可以检查isset($_POST['revokeaction'])
所有的浏览器将只设置按下的按钮,IE是愚蠢的,将值设置为坐标或什么的,其他浏览器也设置为true,和Firefox通常将值设置按钮上的t4ext。 但是,最好的办法是只检查$_POST
数组,一个是存在的。
编辑
使用JS来解决这个可能是正确的,但是当用户有JS这个解决方案适用于或关闭,因此,我认为这是更优雅
编辑
如果你不希望使用这些作为实际的按钮,就可以将它们设置为display: none
再触发要真正地提交表单的一个点击。