自定义按钮触发文件上传—label

我在做自定义按钮触发文件上传的时候,去百度找方法都是:div点击后通过js触发input的文件上传,而不是使用label标签。
原文链接:自定义按钮触发文件上传

自定义按钮触发文件上传

不使用label

不使用label代码:

<div οnclick="upfile()">上传</div>
<input type="file" style="display: none;" id="cs"></input>

<script>
function upfile(){
	document.getElementById('cs').click()
}
</script>

虽然能实现自定义按钮触发文件上传,但很奇怪!
为什么很奇怪?
因为,为什么要写js去触发input的文件上传?html不是提供了更简单的label标签去触发input的文件上传事件吗?

使用label

来看看使用label的写法:

<label>
	<div>上传</div>
	<input type="file" style="display: none;" id="cs"></input>
</label>

这不是十分简洁、简单?

label的使用
定义和用法

<label> 标签为 input 元素定义标注(标记)。
label 元素不会向用户呈现任何特殊效果。不过,它为鼠标用户改进了可用性。如果您在 label 元素内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。
<label> 标签的 for 属性应当与相关元素的 id 属性相同。

通过代码理解
<!-- 第一种写法 -->
<label>
	<div>上传</div>
	<input type="file" style="display: none;"></input>
</label>

<!-- 第二种写法 -->
<label for="cs">
	<div>上传</div>
	<input type="file" style="display: none;" id="cs"></input>
</label>

<!-- 第三种写法 -->
<label for="cscs">
	<div>上传</div>
</label>
<div>其他内容</div>
<div>其他内容</div>
<input type="file" style="display: none;" id="cscs"></input>

1、从方法一、二可以看出,label标签内嵌是可以省略for和id的。
2、从方法二、三可以看出,如果要触发写在label外面的input标签,就需要label通过for的值,去找input的id的值。值一样就触发。

至于用那种方法,当然是看自己的需求,那种方法都比用js去触发强。

深究label的使用

先看看下面这组代码:

<label>
	<div>上传</div>
	<input type="file" style="display: none;" οnclick="console.log(456)"></input>
	<input type="file" style="display: none;" οnclick="console.log(123)"></input>
</label>

<label for="cs">
	<div>上传</div>
	<input type="file" style="display: none;" οnclick="console.log(456)"></input>
	<input type="file" style="display: none;" οnclick="console.log(123)" id="cs"></input>
</label>

通过console的打印可以看出,点击第一个上传打印的是456,点击第二个上传打印的是123。可以知道:
1、label默认触发第一个input的事件。
2、使用for和id可以指定label触发那个input的事件。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值