位置: 编程技术 - 正文

JavaScript CSS修改学习第五章 给“上传”添加样式(js如何修改style)

编辑:rootadmin
问题 在一个网站中可能我的输入框式下面这样的: 设计者可能想让上传部分也像这样然后再添加一个select按钮。但是当我想把普通的输入框改为上传框时就根本不能工作。浏览器之间有很大的不同,给默认按钮添加样式也几乎不可能。

这很难成为设计的很好的上传框,但是也是我们能做的最多的了。

注意到Safari的设计有些不同。Safari小组想关闭手动输入文件的功能,可能担心这样的溢出。这样设计有个缺点就是用户在选择了一个文件之后不能取消上传文件。

解决办法

读者Michael McGrady发明了一个不错的小技巧来解决给上传按钮添加样式的问题。这个页面上的所有解决办法都是他发明的,我只是添加了position:relative,一些注释和测试,然后转为JavaScript。

没有使用这个技巧的时候:

使用了之后我想成为这样:

现在看起来好多了不是么?

McGrady的方法很简单且优雅:

1、设置一个普通的<input type="file">,然后放置在包含postion:relative属性的元素中。

2、同样在父元素中,添加一个普通的<input>和一个图片,给他们设置样式。给他设置绝对位置让这个普通的input能够和<input type="file">重叠。

3、然后把<input type="file">的z-index设置为2,这样他就能在普通的input上面显示。

4、最后将<input type="file">的opacity设置为0。这样<input type="file">就看不见了,下面的input/image就能显现出来,但是你还能点击“浏览”按钮。如果这个按钮的位置在图片上面,那么看起来好像点击的就是图片一样。

注意你不能使用visibility:hidden,因为一个真正的不可见元素是不能点击的,我们需要一个能点击的不可见元素。

至此,这个效果可以通过纯CSS显示了,但是还差一点

5、当用户选择了一个文件之后,那个可见的假的输入框应该显示选择文件的路径,就像正常的<input type="file">一样。虽然只需要简单的把<input type="file">的内容复制过来,但是还是需要JavaScript的。

所以这个技术如果没有JavaScript可能不能完全实现。我一会会解释原因。我决定把整个这个想法写成JavaScript的。如果你想使用没有文件名显示的上传框的话也可以使用纯CSS方式,虽然这不是一个好办法。

HTML/CSS结构 我打算用下面的HTML/CSS结构: <div class="fileinputs">的位置是relative,这样我们就能在里面放置一个绝对位置的层:假的输入框。 <div class="fakefile">包含一个假的输入框和一个按钮,他的位置是绝对的,z-index值是1,这样他就能在真正的上传框下面显示。 真正的上传框也有位置属性relavtive,这样就能设置他的z-index值了。总之需要上传框在假的输入框之上显示。然后我们设置他的透明度为0,让他不可见。 还需要注意text-align:right:因为Mozilla不能设置上传框的宽度,所以我们要保证浏览按钮在DIV的右边缘,假的按钮也要在右边,而且应该在真的下面。 你还需要一些css代码来设置宽度高度边框等等,在这个例子中我没有写。 为什么是JavaScript? 使用JavaScript的第一个原因就是要把文件路径复制到假的文本框里。 第二,JavaScript会忽略掉没有意义的HTML代码:<div class="fakefile">,让代码保持干净。 最后,对于一些旧的浏览器不能处理CSS,在Netscape和IE4里面文件输入就不可访问。对于那些没有CSS的浏览器,用户会看到两个输入框,而且不能理解第二个是干嘛的。

Netscape 4的问题

在Netscape 4里面用户只能看见按钮。可能是因为position:absolute的原因。

IE4的问题

在IE4里面会有一个诡异的原来的“浏览”按钮的影子,而且不能点击。没有解决办法

Netscape 3的问题

对于那些没有CSS功能的浏览器。虽然可以使用,但是两个输入框会让用户郁闷。

解决办法-JavaScript

这些问题的解决办法就是JavaScript:通过JavaScript生成输入框和按钮。现在最坏的情况就是JavaScript不能执行,即使如此,用户也能上传文件。虽然不那么好看,但是还是能工作的。

所以原来复杂的HTML变成了:

我们通过JavaScript来添加其他元素。 代码 解释 如果浏览器不支持W3C DOM,那么什么也不做。 创建<div class="fakefile">和他的内容。需要的时候我们会复制它。 然后遍历页面上的所有input,如果不是<input type="file">则忽略。 再做一次检测:如果<input type="file">的父元素没有fileinputs的class,则忽略。 现在我们就找到了需要添加样式的上传框。首先我们添加一个hidden的类名。 复制假的输入框然后添加在<input type="file">的父元素上。 现在我们就成功的添加了样式。但是还没有结束,我们希望用户在输入框内看到文件路径。 首先我们给<input type="file">创建一个属性,指向假的输入框: 这样当用户改变了上传文件的时候我们就能很轻松及时的访问到假的输入框,然后复制路径。 在这有个问题,我们使用什么event呢?通常使用change事件,当上传文件改变的时候,假的输入框的值也随之改变。 但是Mozilla 1.6在上传框上不支持这个事件(Firefox支持)。所以我在这里添加一个onmouseout的事件。(IE下同样可以运行,Safari不行) 问题和扩展 还有一个问题,用户在选择了一个文件之后就不能取消了。 假设用户选择了一个文件之后,突然不想上传了。通常只需要删除文件路径就可以了。但是在我们的例子里却很难,试一试,可以删除但是通常与感觉相反。 所以我们希望用户通过修改假的输入框也能修改真正的上传路径。 允许选择是可能的。当用户选择了上传文件的任何部分,我们就选择整个假输入框的全部内容。 [code] x[i].onselect = function () { 2 this.relatedElement.select(); 3 } 但是JavaScript的安全性不允许程序修改上传路径,所以我们不能通过让用户修改输入框的内容来修改真正的上传路径。所以我决定放弃onselect事件。 一种可行的办法是:给假的输入框添加一个清楚按钮,当用户点击之后就删除掉原来的上传框然后重新创建一个。这虽然笨重,但是能确实删除用户不想上传的文件路径。我不觉得这个一定可以工作,我也没有写这部分代码。 点击事件的路径 有读者建议,去掉那些繁杂的CSS,彻底隐藏上传框,然后把假的输入框的click事件绑定在真正的上传框上。非常棒的想法,而且比上面的简单的多。 [code] fakeField.onclick = function () { 2 realField.click() 3 } 这个click()方法允许你仿真一个表单项。复选框的点击,单选框被选中等等。然而Mozilla和Opera不支持。我想知道为什么,因为添加这个方法最大的不安全性就在于弹出一个选择文件的对话框而已。 所以我们也不能用这个简单的办法。 翻译地址: 转载请保留以下信息 作者:北玉(tw:@rehawk)

推荐整理分享JavaScript CSS修改学习第五章 给“上传”添加样式(js如何修改style),希望有所帮助,仅作参考,欢迎阅读内容。

JavaScript CSS修改学习第五章 给“上传”添加样式(js如何修改style)

文章相关热门搜索词:js 修改 css,js如何修改style,js修改css文件,js修改css文件,js修改css样式属性,js如何修改css,js 修改 css,js 修改 css,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript CSS修改学习第六章 拖拽 当示例的box上的#链接处于活动状态的时候(不论是用tab然后点击enter或者使用鼠标点击)这个元素就能够通过方向键拖拽。然后点击enter或者Esc释放。(

jQuery入门问答 整理的几个常见的初学者问题 本节并没有涉及到jQuery如何编写,只为大家解决几个常见问题,因为这也是面试中常常遇到的几个问题。如果你掌握了jQuery可以成为提升工资的一个资

第一个JavaScript入门基础 document.write输出 如果你有编程基础,学习Javascript是一件很容易的事情,如果你没有编程基础,也不要担心,我们会为你解释每一行代码。htmlbodyscripttype=text/javascriptdocume

标签: js如何修改style

本文链接地址:https://www.jiuchutong.com/biancheng/381862.html 转载请保留说明!

上一篇:JavaScript CSS 修改学习第四章 透明度设置(js中改变css文件中的样式)

下一篇:JavaScript CSS修改学习第六章 拖拽(js修改css文件)

  • 房产公司预缴土地增值税怎么做账
  • 增值税销项税额账务处理
  • 增值税专用发票怎么开
  • 公司向个人借款是否合法
  • 累计折旧贷方余额表示
  • 减免所得税额是怎么算出来的12行
  • 利润表中财务费用是负数怎么算营业利润
  • 一般纳税人转登记为小规模纳税人
  • 劳动法相关法规
  • 怎么让银行同意商转公
  • 商品房买卖合同没有约定逾期交房违约金
  • 提前退休取得的一次性补贴收入
  • 从关联企业获得非工资报酬怎么缴纳个税?
  • 贸易公司出口退税流程及账务处理
  • 烟酒发票可以抵扣所得税吗
  • 普通发票年份代码有什么具体含义?
  • 抵扣消费税的利益主要
  • 房地产企业所得税核定征收率
  • 固定资产处置计算公式
  • 计提附加税的会计分录怎么写
  • 全年物业费需要待摊吗
  • 服务业的营业成本怎么算
  • 盘亏机器设备会计分录
  • 劳务费发票已开款未收回如何做帐?
  • dwg文件怎么打开
  • 信息技术服务费发票
  • 5000以下的固定资产当月一次性扣除怎么申报
  • 固定资产已提完折旧,但仍在使用,需要定期清理吗?
  • 1.exe是什么文件
  • 制造业成本核算明细表
  • 原材料入库时如何计价
  • vue全家桶插件有哪些
  • 金蝶迷你版财务软件报价
  • 工会经费零申报怎么填
  • 空调维修费进什么会计科目
  • 单位收到社保补贴的钱做账
  • openapi官网
  • php floatval
  • 进口设备退税如何计算
  • php网站用什么软件修改
  • 利息收入交所得税吗
  • 淘宝天猫开票是普票还是专票
  • 企业接受投资者投资,投资者超额缴入的资本
  • 帝国cms使用手册
  • mysql的文件格式有哪些
  • phpcms api
  • 进项票和销项票金额一样可以吗
  • 个税哪种申报不用交个税的
  • 企业内部股权转让协议书
  • 非公司员工机票能报销吗
  • 开外管证再省外能办理吗
  • 小规模税收酒店做账报税
  • 购买的银行理财产品能提前赎回吗
  • 借长期借款贷在建工程
  • 企业在期间新购进的设备、器具
  • 跨年度的项目如何做
  • 车间劳务费计入什么费用
  • 小微企业免税的标准
  • 留抵的进项税可以用多少年
  • mysql安装使用教程
  • 微软补丁星期二更新吗
  • macbookair cpu
  • linuxmail命令
  • win7无法更改设置
  • explorer.exe进程文件
  • win8个性化外观恢复默认设置
  • Zen Coding css,html缩写替换大观 快速写出html,css
  • perl读取文件内容逐行处理
  • c# opengl 3d
  • android之Java+html+javascript混合开发
  • unity获取物体位置代码
  • 工具类软件有哪些
  • 税务局县区级及以下
  • 地税办理停保
  • 深圳市公安局的位置
  • 不能抵扣消费税口诀
  • 车没交车船税上路什么后果
  • 上缴财政总额是什么意思
  • 收购农民自产农产品可以使用现金
  • 二手车中介公司怎么做账报税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设