【问题标题】:Why does PHP only parse DOM elements using 'name' identifiers, and not 'id'?为什么 PHP 只使用 'name' 标识符而不是 'id' 解析 DOM 元素?
【发布时间】:2016-05-11 07:16:26
【问题描述】:

在表单中必须为一个元素的 id 和 name 复制相同的字符串似乎有很多浪费:

<input id="foo" />            <!-- JS/CSS accept this -->
<input name="foo" />          <!-- Only PHP accepts this -->
<input id="foo" name="foo" /> <!-- Everyone's happy -->

为什么 PHP 不使用 id 标签?

【问题讨论】:

  • ID 被设计为唯一的(每个元素),防止您从多值输入(复选框、多选等)收集数据。没有name,您将不得不设计自己的约定对这些用例的输入进行分组,任何约定都往往是不完美的。 ) 此外,这与 PHP 无关;这是关于提交表单时如何处理表单。
  • 相关(我想几乎是重复的):Difference between id and name attributes in HTML
  • 这不是“解析 DOM”,而是让服务器端设计为从客户端发送什么表单
  • 投票结束作为问题raina77ow提到的重复。虽然问题提到了 PHP,但这是一个误解,因为 PHP 只能处理浏览器提供的内容。浏览器提供的内容以及原因已在现有答案中充分说明。
  • 抱歉,我确实搜索过,但认为 php 是相关的。

标签: javascript php dom


【解决方案1】:

为什么 PHP 不使用 id 标签?

因为这是将表单提交到指定服务器端的标准集。我会说 ID 最有可能与 js/css 一起使用,而您需要 name 来序列化您的表单元素。

【讨论】:

  • PHP 不使用它,因为它是标准的;它使用它因为这是浏览器提供的。 PHP 在这件事上绝对别无选择,因为 ID 永远不会传输给它。
  • @IMSoP 实际上我没有正确的术语要提,你的似乎更好一点。
【解决方案2】:

Id 属性用于 DOM 操作。 http://www.w3schools.com/tags/att_global_id.asp

发送表单时,name 属性也被使用。 http://www.w3schools.com/tags/att_input_name.asp

这些是不同的目的。 您也可以在 JS 中使用 name 属性,但会返回元素数组:

// plain JS
document.getElementsByName("foo");

// jQuery example
$('[name="foo"]')

【讨论】:

    【解决方案3】:

    因为在 web 中每个唯一用途都需要 3 个类型标识符,例如

    1) 类:用于设计和在 dom (jquery) 中选择多个标签
    2) id : 用于访问 dom 中的某些特定元素,也为一个字段设计
    3) name : 用于传递单个和多个数据和数组

    如果你可以通过 id 传递值,那么你如何发送复选框值和多个选择标签值???

    【讨论】:

    • 这有点不精确,并没有解决问题。
    【解决方案4】:

    为什么 PHP 不使用 id 标签?

    那不是 PHP,那是 HTML。 PHP 与 HTML 规范无关。

    HTML确实使用id 属性,但它使用它们的目的与name 属性不同。

    HTML form elements 来自其子值承载元素(inputselecttextarea 等)的构建请求(通常为POSTGET)。 name属性作为key,value(或者选择值等)作为value。

    这将为请求中的数据创建键/值对。

    在表单中必须为一个元素的 id 和 name 复制相同的字符串似乎有很多浪费

    您不必复制它。 可以亲自选择复制它。但这是你的选择。任何规范/标准/约定/等都没有规则。表明你必须甚至应该这样做。


    <input id="foo" />            <!-- JS/CSS accept this -->
    <!--- incorrect.  JS/CSS can also target name attributes if necessary. -->
    
    <input name="foo" />          <!-- Only PHP accepts this -->
    <!--- incorrect.  This isn't PHP, this is HTML.  PHP isn't involved here at all. -->
    
    <input id="foo" name="foo" /> <!-- Everyone's happy -->
    <!--- if that's the markup you choose to define, sure. -->
    

    【讨论】:

    • 我明白 PHP 是如何无关紧要的(并为此道歉),但我仍然不明白为什么表单不使用 id 而不是 name 作为键。在重复的问题链接中,给出的答案是它对于您想要覆盖的复选框或其他输入组很有用,但这似乎充其量是弱的。
    • @tetris11:这个推理有多“弱”?你会提出什么替代方案? id 在整个 DOM 中必须是唯一的(正如其名称所暗示的那样,它是一个标识符)。 name 用于完全不同的目的,确定 HTTP 请求的键/值数据对中使用的键。我想可以在 HTML 规范中引入一条规则,说“在没有 name 属性的情况下,HTTP 请求数据应该使用 id 属性”,但这可能会增加不必要的复杂性和边缘情况。这两个属性意味着和做不同的事情,所以它们是不同的属性。
    • 但是键应该是唯一的,如果已经有一个说明符提供一个 (id) 为什么不使用它而不是依赖一个完全不同的规范呢?我喜欢你的后备建议,这对我来说最有意义,因为为具有多个复选框的唯一边缘情况发明一个全新的规范似乎有点……弱。
    • @tetris11:密钥在 HTTP 请求中是唯一的,而不是在 DOM 中。单个 DOM 可以有多种形式,通常指向相同的操作,但具有不同的数据集。表单可以有条件元素。等等。我的提议确实有意义,它旨在证明规范中存在歧义的可能性。软件(可能在许多事情中)的一个好的经验法则是任何一个组件都应该有一个单一的职责。您建议一个组件 (id) 有时应该有两个职责。歧义和边缘情况是定义明确的规范的祸根。
    • 多个表格上的公平点,没想到一个通过。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多