怎样扩展EasyUI在页面中马上显示选中的本地图片
在编写前台页面的时候,有时须要将选中的图片夹杂着其它信息一起上传到服务端,在选着本地图片的时候,为了获得更好的效果,须要将该图片显示在页面上。
最初思路有两个。详细例如以下:
1、获取选中文件的二进制数据再传递给画板,画出图片来。
2、获取选中文件的传递给Img标签。
经过測试,得到例如以下结果:
1、Img标签的src无法指向本地路径的文件,这应该是基于安全考虑的结果吧。
2、通过File API 读取的文件二进制数据无法直接传递给Cancav画板画出选中图片,这也许也是基于安全考虑的结果。
3、经过不懈努力。最终发现了一个解决方法,那就是通过File API的FileReader对象的readAsDataURL将本地图片创建出一个虚拟URL传递给Img标签的src。
具体代码例如以下:
当前项目是基于EasyUi的。以下是页面的对话框代码,请关注id="announcePicture"的文件控件,系统要求在该文件控件选择一个图片文件时,将其显示在id="img"的Img标签中。
<div id="announceDlg" class="easyui-dialog" style="width:400px;height:550px;padding:10px 20px" closed="true" buttons="#announceDlg-buttons">
<div class="ftitle">公告信息</div>
<form id="fm" method="post" enctype="multipart/form-data">
<div class="fitem">
<label>公告Id:</label>
<input id="announceId" name="announceId" class="easyui-textbox" type="text" value="">
</div>
<div class="fitem">
<label>标题:</label>
<input type="text" id="announceTitle" name="announceTitle" class="easyui-textbox" value="" data-options="required:true">
</div>
<div class="fitem">
<label>文件:</label>
<input class="easyui-filebox" id="announcePicture" name="announcePicture" value="" style="">
</div>
<div class="fitem">
<label>内容:</label>
<input type="text" id="announceContent" name="announceContent" class="easyui-textbox" value="" data-options="iconCls:'icon-search',multiline:true,required:true" style="height:120px">
</div>
<div class="fitem">
<label></label>
<img id="img" style="width:160px;height:160px" />
</div>
</form>
</div>
<div id="announceDlg-buttons">
<a href="javascript:void(0)" class="easyui-linkbutton c6" iconcls="icon-ok" onclick="save()" style="width:90px">Save</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconcls="icon-cancel" onclick="javascript:$('#announceDlg').dialog('close')" style="width:90px">Cancel</a>
</div>
以下是对EasyUI进行的拓展,添加了getFile方法。该方法能够获取当前FileBox对象选中的文件的File对象。
$.extend($.fn.filebox.methods, {
getFile: function (myself) {
var temp = $(myself).next().children("[type='file']");
var file = document.getElementById(temp.attr("id"));
if (file.files.length > 0) {
// 若选中一个文件,则返回该文件的File对象
return file.files[0];
}
// 若未选中不论什么文件,则返回null
return null;
}
});
以下是设置FileBox对象的OnChange事件,当选择一个图片后。执行当中定义的事件处理函数:
$("#announcePicture").filebox({
onChange: function (event) {
// 获取所选文件的File对象
var file = $(this).filebox("getFile");
if (file != null) {
// 创建FileReader对象
var reader = new window.FileReader();
// 定义reader的onload事件
// 当读完文件信息后触发onload事件
reader.onload = function (e) {
// reader.result保存着产生的虚拟URL
$("#img").attr("src", this.result);
}
// 读取指定文件并形成URL
reader.readAsDataURL(file);
}
}
});
细心的各位一定会发现,在FileBox对象的OnChange事件处理函数内调用getFile时并未传递不论什么阐述。可是在getFile函数中却有一个myself參数被运用了。要了解这点须要看一下EasyUI中处理FileBox的源码:
$.fn.filebox = function (_4ed, _4ee) {
if (typeof _4ed == "string") {
var _4ef = $.fn.filebox.methods[_4ed];
if (_4ef) {
return _4ef(this, _4ee);
} else {
return this.textbox(_4ed, _4ee);
}
}
_4ed = _4ed || {};
return this.each(function () {
var _4f0 = $.data(this, "filebox");
if (_4f0) {
$.extend(_4f0.options, _4ed);
} else {
$.data(this, "filebox", {
options: $.extend({}, $.fn.filebox.defaults, $.fn.filebox.parseOptions(this), _4ed)
});
}
_4ea(this);
});
};
看到 return _4ef(this, _4ee); 这句语句了吗?EasyUI在调用指定方法时,默认第一个參数为当前对象,而实际传入的參数,则作为第二个參数来使用。
怎样扩展EasyUI在页面中马上显示选中的本地图片的更多相关文章
- 页面中直接显示FTP中的图片
页面中直接显示FTP中的图片 FTP根目录下有一张图片,如下 第一步: 通过如下格式,在浏览器上输入路径,确定可看到图片 ftp://root:root@127.0.0.1/111.png ftp:/ ...
- java web中日期Date类型在页面中格式化显示的三种方式
一般我们经常需要在将服务器端的Date类型,传到页面进行显示,这就涉及到一个如何格式化显示Date类型的问题,一般我们有三种方式进行: 1)在服务端使用SimpleDateFormat等类格式化成字符 ...
- 引号在jsp页面中正确显示的处理
写在前面: 在前面的博客中已经有了对一些特殊字符的处理,但是万万没有想到,出来了一个含有引号的字符串,比如这样的ab"c"d的一个字符串.如果在超链接传值的时候,会与前面的引号成对 ...
- 百度地图api在Html中显示,在jsp页面中不显示解决方法
在jsp页面中显示如下 但是在html中正常显示. 原来的代码如下: <script type="text/javascript" src="http://api. ...
- 同一标签内多个css规则在页面中如何显示?
这两天在学习css涉及到内联.外联.嵌入对页面的影响: 1.内联式-----将css代码直接写在html中.用 <style> 标记将样式定义为内部块对象.示例代码如下如下: <st ...
- 关于jsp页面中时间显示问题
首先说明一下情况,在MySQL数据库中获取的时间显示在jsp页面中不是按指定格式显示,显示的是类似于这种--Tue Jun 18 00:00:00 CST 2013.而想要的仅仅是年月日而已. 对于这 ...
- angularjs中只显示选中的radio的值
angularjs中,只显示选中的radio的值.主要是相同的radio,name属性值要相同还有ng-model的值要相同,同时要指定value值.这样选中的时候就会在下面的div中显示选中的值了. ...
- \r\n 如何转换成utf-8格式的,在jsp页面中正常显示换行
数据库中存的换行是\r\n,读取到UTF-8编码的JSP 页面上以后,没有换行 在jsp页面显示之前,要进行一下字符转换,将所有\r\n转换成<br>,如下: String result ...
- mvc页面中,显示自定义时间格式
1.在model中,遇到datetime格式的字段,用string来表示 model中 /// <summary> /// 开始时间 /// </summary> [Displ ...
随机推荐
- 7-Java-C(冰雹数)
题目描述: 任意给定一个正整数N, 如果是偶数,执行: N / 2 如果是奇数,执行: N * 3 + 1 生成的新的数字再执行同样的动作,循环往复. 通过观察发现,这个数字会一会儿上升到很高, 一会 ...
- Java中的类加载器--Class loader
学习一下Java中的类加载器,这个是比较底层的东西,好好学习.理解一下. 一.类加载器的介绍 1.类加载器:就是加载类的工具,在java程序中用到一个类,java虚拟机首先要把这个类的字节码加载到内 ...
- Django之使用celery异步完成发送验证码
使用celery的目的:将项目中耗时的操作放入一个新的进程实现 1.安装celery pip install celery 2.在项目的文件夹下创建包celery_tasks用于保存celery异步任 ...
- MySQL 初识
一.MySQL介绍: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,M ...
- MySQL学习点滴 --分区表
写在前面:笔者之前也有一些MySQL方面的笔记,其中部分内容来自极客时间中丁奇老师的课程.后经园友提醒,这个做法确实不太好.之后我仍会继续更新一下MySQL方面的学习记录,在自己理解之后用自己的方式记 ...
- C第10章-----通过引用传递
#include <stdio.h> #include <math.h> void metersToFeetAndInches(double meters,unsigned i ...
- 洛谷 P1938 [USACO09NOV] 找工就业Job Hunt
这道题可以说是一个复活SPFA的题 因为数据比较小,SPFA也比较简单 那就复习(复读)一次SPFA吧 #include<iostream> #include<cstdio> ...
- 把以100000+4位随机码的登录账号(比如1000001234),赋予制单页面的权限,怎么写sql啊
insert into sys_user_role (user_id,role_id,office_id) select id,'000101100000000004UP',company_id f ...
- SSH常见问题集锦
/WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/包含了站点所有用的 class 文件,包括 ser ...
- 两行代码快速创建一个iOS主流UI框架
本框架适用于 使用 NavigationController+UITabBarController 的APP 框架QLSNavTab , GitHub地址:https://github.com/qia ...