【问题标题】:How can I get a file upload button's text?如何获取文件上传按钮的文本?
【发布时间】:2016-10-27 20:12:18
【问题描述】:

我正在为一个网络平台编写文档,我想在我的说明中引用一个文件上传按钮。但是,按钮上的确切文本取决于浏览器。例如,Firefox 将其称为Browse...,Chrome 将其称为Choose File

<input type="file">

是否可以通过编程方式访问(而不是更改)该文本?我知道我可以检测浏览器并相应地在文档中设置文本,甚至可以使用解决方法来设置按钮文本,但这不是我要问的。

【问题讨论】:

  • “访问”是什么意思?
  • 他想将实际文本提取到他的文档中,我猜,基于按钮上的实际文本是什么,基于用户使用的任何浏览器,但不必求助于获取浏览器-信息。
  • 不幸的是,有人删除了他们的答案,所以我将指出另一个问题的答案:stackoverflow.com/a/21842275/34806
  • @fenceop 您是否尝试使用客户端 javascript 检索值?
  • 它解决了 OP 的问题,但显然我们无法解决任何问题

标签: javascript html button


【解决方案1】:

此文本由浏览器呈现特定 HTML 元素的方式设置。无法访问或更改该文本。它永远不会被加载到 DOM 中,因此也不能通过 jQuery 进行查找。

对于您的文档,您可能想说明文本的 IE 版本,然后列出 Chrome、Safari、Firefox 等。这是我能想到的向用户解释的最佳方式。

编辑

我只是想更新并提及 Shadow DOM,因为它对我来说很有趣而且很新。您可以在 Chrome 开发工具 -> 设置 -> 显示用户代理影子 DOM 中启用此功能。在那里,您实际上可以查看呈现的控件和为其设置的文本。虽然,它不能通过客户端脚本以编程方式访问。 :(

【讨论】:

  • “无法访问或更改该文本。” 可以查看包含&lt;input&gt; 元素的元素的ShadowDOM,其中.value 是在 chrome, chromium 处渲染的文本。
  • 我没有这方面的经验。但它不是只有在用户使用 Chrome 时才有用吗?
  • 尚未找到在 Firefox 上查看 &lt;input type="file"&gt; 元素的 ShadowDOM 的方法。将尝试每晚。不可能“以编程方式访问(而不是更改)该文本”。
  • 编辑后的答案与此答案stackoverflow.com/a/40293559 有何不同?
  • 哦,原来的答案,你的意思是你的。您使用“原始答案”的上下文使您看起来像是在修改之前指的是我的答案。是的,和你的答案一样,只是想添加它以确保每个人都能看到它。
【解决方案2】:

您可以为 input_id 使用标签并隐藏输入。

例子:

label {
/*Just to simulate a button, you will put your button style*/
  -webkit-appearance: button;
  -moz-appearance: button;
  appearance: button;
  text-decoration: none;
  color: initial;
}

input {
/*hide the inout*/
  width: 0px;
  outline:none;
  opacity:0;
  visibility:none;
  height:0px;
  display:none;
}
<label for="b1">
    Name
    <input type="file" id="b1">
</label>

工作DEMO

【讨论】:

  • Ciao Paolo,我想获取默认文本,而不是更改它。
  • @fenceop 在呈现文本的&lt;input&gt; 内,无法“获取.value 的默认文本”。
【解决方案3】:

是否可以通过编程方式访问(而不是更改)该文本?

不。无法访问以编程方式呈现文本的&lt;input type="file"&gt; ShadowDOM 内的&lt;input&gt; 元素的.value。显示ShadowDOM&lt;input type="file"&gt; DOM 元素的.shadowRoot 属性设置为null

铬,铬在&lt;input type="file"&gt; 元素的&lt;input type="file"&gt; 元素.computedNameinput type="file" 属性处暴露&lt;input type="button" value="Choose File" pseudo="-webkit-file-upload-button"&gt;.valueinput type="file" 元素

const UPLOAD_BUTTON_TEXT = document.querySelector("input[type=file]")
.computedName;
console.log(UPLOAD_BUTTON_TEXT);
&lt;input type="file" /&gt;

在铬,铬你可以查看元素

<input type="button" value="Choose File" pseudo="-webkit-file-upload-button">

它通过打开DevTools,选择Settings,检查Show user agent shadow DOM,然后检查&lt;input type="file"&gt;元素来呈现host&lt;input type="file"&gt;元素处的文本。

&lt;input type="file"&gt;

【讨论】:

  • 所以它并没有真正解决他能够以编程方式访问它的问题。不过,这是我在很长一段时间内了解到的关于开发工具的最有趣的事情。
  • @CrazyPaste 目前无法解决“问题”。无法使用客户端 javascript 以编程方式访问 .value
猜你喜欢
  • 2014-01-07
  • 2020-10-28
  • 2017-01-19
  • 2015-01-02
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
相关资源
最近更新 更多