【问题标题】:PHP HTML Show button propertiesPHP HTML 显示按钮属性
【发布时间】:2012-04-13 16:15:49
【问题描述】:

我希望能够从一个按钮中获取尽可能多的属性来显示。

按钮:

<input name="Accept" type="submit" class="button" id="Accept" value="Accept" />

按钮代码:

if(isset($_POST['Accept'])){
//show button properties here
}

我希望它在按下按钮时显示:

  • 姓名:接受
  • 类型:提交
  • 类:按钮
  • id:接受
  • 值:接受

还有什么可以显示的

先谢谢你了。

【问题讨论】:

  • 我知道您可能无法展示所有内容,但我希望能够展示尽可能多的内容
  • 你的用例是什么? POST 时,只会发送输入元素的名称和值。
  • 提交时传回的唯一数据是名称和值对。除非你愿意使用 JavaScript。
  • 所以我知道我是否可以对这些属性进行处理。例如,如果 ID=5 做某事。
  • Sam 为什么需要 id ?在这种情况下,该输入的名称将是唯一的,或者至少应该是唯一的。

标签: php html post button


【解决方案1】:

没有办法通过正常的 HTML 行为来获取 HTML 元素的属性 - 但是您可以使用处理“onSubmit”表单事件的 JavaScript 函数,您可以通过它发送您需要的所有内容。

【讨论】:

  • 好的,谢谢。像这样的东西怎么样... name="save[11798779]" 我怎样才能得到这个号码?
  • 当然之后 $_POST 将包含键 'save',它是键为 '11798779' 的数组,其中包含原始 HTML 元素的值。
  • 最简单的方法是使用foreach - 如果您不知道要查找的号码。或者,如果您知道要查找的内容,请使用 array_key_exists 检查号码是否存在。
  • 嗯,你能举个例子吗?
  • 试试这个简单的代码:&lt;html&gt;&lt;head&gt;&lt;title&gt;test&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;pre&gt;&lt;?php var_dump($_POST);?&gt;&lt;/pre&gt;&lt;form id="testform" action="" method="POST"&gt;&lt;input name="Accept[asdfsd]" type="submit" class="button" id="Accept" value="Accept" /&gt;&lt;/form&gt;&lt;/body&gt;&lt;/html&gt; - 将它保存为test.php 并运行它,你会看到。
【解决方案2】:

不使用 javascript 的一种可能方法是将数据副本存储在元素名称中:

<input name="Accept" type="submit" class="button" id="Accept" value="Accept" />

变成:

<input name="Accept.submit.button.Accept" type="submit" class="button" id="Accept" value="Accept" />

您可以从您的$_POST 数组中获取value。对于其余属性,只需使用 explode() 拆分元素的键即可。

【讨论】:

    【解决方案3】:

    除了名称和值之外,无法提交输入的属性,但是您可以在表单上使用您想要的任何信息隐藏输入,您甚至可以在按钮的 onclick 中创建或动态填充它们或表单的 onsubmit 事件。

    作为另一种选择,我会以 JSON 形式将信息填充到按钮的值中,因为按钮的值通常没有任何用途。

    如果你真的很想出主意,那么你可以在表单的 action 属性中填充 url 的查询字符串中的信息,然后通过检查 GET 数组来获取信息(但是如果表单方法是 get而不是发布,那么这些值可能会被覆盖!)

    但如果您的问题只是您需要一种方法来区分许多按钮,那么只需为每个按钮设置不同的名称或值,这可能是按钮具有名称和值的唯一原因。


    关于 andrejd 的回答,请注意,虽然您可以使用 onSubmit 函数通过 Ajax 提交,然后返回 false 以取消默认提交,但请注意,该方法存在以下问题:

    1) onSubmit 函数不知道按下了哪个按钮,但是您可以改用按钮​​的 onClick 事件,但是您必须绑定到表单上的每个提交按钮(您可以使用 jquery 更轻松地做到这一点等等)

    2) 由于 Ajax 不会影响页面内容,因此 ypu 会自行刷新或自行导航页面,后者可以使用“location.href”完成

    3) 如果你要提交文件,你会很难用 ajax 来做,你可以尝试使用 jquery fileupload 插件。

    4) Ajax 仅限于同一来源(tgat 表单提交不是),您可以尝试使用 JSONP 解决方法。

    5) 如果客户端没有JavaScript(如一些手机或一些文本浏览器如linux浏览器)或禁用了JavaScript或使用的是旧版浏览器,Ajax将无法工作,一般不推荐完全依赖 Ajax,但至少为这些情况提供了替代方案。


    对于问题 2-4,您还可以通过让 Ajax 仅包含额外内容来解决它们,然后返回 true 以让默认提交提交表单。

    【讨论】:

    • 这是在无状态 HTTP 中做这些事情的标准方式,这也是首先存在隐藏输入的原因。
    • 事实上 ASP.Net 几乎完全基于这个使用视图状态输入的想法
    • 我编辑了我的答案以添加另一种可能的方式,但我仍然建议坚持使用隐藏输入的标准方式
    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2015-04-14
    相关资源
    最近更新 更多