web开发中所遇到的问题总结
jquery miniui开发问题:
2017/3/28
当你用了
Class="mini-button" id="btn1"
这样可以用mini.get("btn1").getValue()
来获取值,如果是id="obj" 这样就直接用document.getElementById("obj").value
来获取。数据验证
监听处理控件的"validation"事件,自定义验证规则和错误描述信息:
`
function onUserNameValidation(e) {
if (e.isValid) {
if (isEmail(e.value) == false) {
e.errorText = "必须输入邮件地址";
e.isValid = false;
}
}
} `
- 使用mini.Form组件对多个控件进行验证:
var form = new mini.Form("#form1");form.validate();
加载表单
`
$.ajax({
url: "../data/FormService.aspx?method=LoadData",
type: "post",
success: function (text) {
var data = mini.decode(text); //mini.decode(data) 反序列话为对象
form.setData(data); //设置多个控件数据
}
});` 提交表单
//提交表单数据
var form = new mini.Form("#form1")
;
var data = form.getData(); //获取表单多个控件的数据
var json = mini.encode(data); //序列化成JSON
`
$.ajax({
url: "../data/FormService.aspx?method=SaveData",
type: "post",
data: { submitData: json },
success: function (text) {
alert("提交成功,返回结果:" + text);
}
});`清除表单
form.clear();
重置表单
form.reset();
-
checkRecursive Boolean
是否联动选择父子节点。比如选中父节点,自动全选子节点。 false √ √ √
autoCheckParent Boolean
是否自动选择父节点。比如选中子节点,将父节点也自动选中。
后台开发沟通问题:
项目文件夹的规范统一。
所有的标签的元素和属性都必须小写 ,尽量用驼峰命名,不用中文名。项目中有name用了大写,后台就麻烦,还得重新修改。tab和空格不要乱用
在jquery mini UI中用 mini.Form(),可以快速序列化,只支持input标签,并且加入class=“mini-”前缀,不然没法获取到value值,用
form.getData()
就可以获取到 {key:value,...}
mini.encode(data);序列化为json, 其他的比如用select用option。就要用
$.extend({},bccFormData,{'see': $("input[type='radio']:checked").val()})
方法。
- 表单验证
onvalidation="onUserNameValidation"
,加vtype 不需要自己写正则,可以自定vtype="email;rangeLength:5,20;"
`function onUserNameValidation(e) {
if (e.isValid) {
if (isEmail(e.value) == false) {
e.errorText = "必须输入邮件地址";
e.isValid = false;
}
}
} `
注:使用mini.Form组件对多个控件进行验证:
var form = new mini.Form("#form1");
form.validate();
input传值获取name /id 都必须有class"mini-"
主页面index.html与子页面之间iframe,子页面要获取父值就要加上
window.parent.get.mini();
sender与EventArgs 它们的用处主要在多个不同的对象需要调用同一个方法时。比如,如果你有两个BUTTON控件,需要调用同一个方法,此时你就可以用sender来确定是哪一个BUTTON调用了当前的方法。而使用e就可以获得不同BUTTON传入的不同的调用参数。
如果是自定义的函数、方法,不需要处理这些参数时,就可以不带这些参数。
e:存放一些传递参数 EventArgs 顾名思义就是关于这个事件的一些参数
前端开发中的一些实用工具
Browsersync:省时的浏览器同步测试工具,同步浏览器
bejson:在线,JSON,JSON校验,格式化
jsonohyeah:模拟后端接口数据工具、url自动生成
nodemon:node进程管理工具,修改node代码,会自动重启
webpack:流行的打包工具
gulp:前端任务管理工具
前端在线编辑器
jsbin
jsfiddle
codepen
- 前端常用开发工具
vscode
sublime
atom
- 浏览器
chrome:开发
IE,Firefox: 产品环境浏览器
- 版本管理工具
svn
Git
- node相关
安装node.js
安装yarn
- 文档书写
markdown
- 原型设计工具
Axure
前端开发中所用到的框架
- 移动端开发使用的框架
amazeui
sui mobile
ant design mobile
angular.js
Bootstrap
zepto很少用
jQuery Mobile
- 设计模式
详细视图
- chrome开发者工具文档
chrome开发者工具文档中文版
项目开发平日总结
2017/3/30
清除input框中的text文本
mini.get(ID).setText("")
更新tabs中url,返回时要更新form表单中的值,通过传值决定,待解决.....
绑定事件时,出现一直绑定时,要先解绑,再绑定 unbind.....bind
2017/4/1
- mini-tabs如何调用每个tab中的js方法
调用tab中的js方法
如何判断tabs.addTab(tab) 的时候 子页面加载完成了
获取到tabs对象,怎么才能获取下面的tab页中的数据
tabs.addTab(tabA)后,tabA的内容何时加载
tabs从整体页面调用子页面的方法
tabs能否不自动加载子页面的内容
javascript的封装思想
2017/4/5
- jquery miniUI中form表单的封装思路,持续开发中,
var valuechang=function(id){return ......}
此方法的调用。
2017/4/6
- 展开收起的切换,用toggle(),addclass,removeclass或者使用hide(),show()方法改变元素的style
2017/4/10
- 用amazeui 框架布局问题,局限性是太过于规整,无法实现灵活性强的开发,API太过于散乱琐碎,需要再次封装(个人看法)
2017/4/12
- angluar页面间路由跳转、在路由中获取jquery元素问题,不在同一控制器中采用$rootScope声明全局变量获取元素
2017/4/17
- (1):chrom浏览器解决本地跨域报错 给chrome添加启动参数:
--allow-file-access-from-files
,这样本地ajax请求就不会报跨域错误。还可以解决本地file加载文件
(2):导致iframe和父页无法相互访问,window.open打开的页面使用opener为null的问题,参考:chrome本地测试访问iframe,parent,opener null解决办法
注意:如果给chrome添加多个启动参数,每个启动参数“--”之前要有空格隔开,如"C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-file-cookies --allow-file-access-from-files)
通过addclass、removeclass,运用class的优先级添加切换样式的改变
通过::before :after改变添加样式,三角之间的切换,定位。就是通过border画各种图形
2017/4/18
- 解决锚点(angluar)平滑滚动到最顶部问题:
`
$rootScope.jumpTop=function(id){
var pos = $(id).offset().top
$("html,body").animate({scrollTop:pos},1000)
}`
- a标签href不跳转 禁止跳转
(1):
标签属性href,使其指向空或不返回任何内容。如:
[点此无反应javascript:void(0)](javascript:void(0);)
[点此无反应javascript:](javascript:;)
(2):标签事件onclick,阻止其默认行为。如:
`return false;
return false;`
用法格式如下:
a).javascript:void (expression)
b).javascript:void expression
你以使用 void 操作符指定超级链接。表达式会被计算但是不会当前文档处装入任何内容。所以,javascript:void(0)
仅仅表示一个死链接。
标签事件onclick="return false;"
在HTML代码中,无论你在哪里放置了onclick事件,并且返回值为false时,那么该处的默认行为将不会执行。这里的默认行为是指没有Onclick事件时原本的行为。
最后,我们来回顾下a标签的三种用法:
`W3School
index
top`
注意:只有一个href="#"是不可以的
因为#包含了一个位置信息,默认的锚是#top 也就是网页的上端。锚是指网页中具体位置。
例如:
首先我们在网页body内最上面添加一个``
我们再到body内,需要出现点击后转到顶部位置添加,[回到顶部](http://www.jianshu.com/writer#top)
点击回到顶部即可让滚动回到顶部。
2017/4/22
在click之后改变其他样式,之后其他地方click自身,再点击click时无反应,此时在第一个click中需要遍历要改变的那个属性DOM元素
在跨页面传参时要传data,比如mini.open:
父页面://弹框严重性
`
function openseverity(e) {
var currentRow = grid.getSelected();
var row = grid.indexOf(currentRow);
var id=grid.data[row]["id"];
var btnEdit = this;
console.log(btnEdit);
console.log(id);
mini.open({
url: "severity.html",
width: 800,
height: 500,
onload: function () {
var iframe = this.getIFrameEl();
var data={id:id};
iframe.contentWindow.SetData(data);
},
ondestroy: function (action) {
if (action == "ok") {
var iframe = this.getIFrameEl();
var data = iframe.contentWindow.GetData();
data = mini.clone(data);
btnEdit.setValue(data.id);
btnEdit.setText(data.text);
}
}
});
}`
子页面://接收父页面传过来的数据
` function SetData(data) {
console.log(data);
//跨页面传递的数据对象,克隆后才可以安全使用
data = mini.clone(data);
$.ajax({
url: "data/possiblity.json?&id="+data.id,
cache: false,
success: function (text) {
console.log(text);
var o = mini.decode(text);
form.setData(o);
form.setChanged(false);
},
error:function(){
console.log("错误");
}
});
}`
2017/5/15
前端开发项目目录:
注册七牛云服务
引入images 链接
2017/5/16
1.trigger()方法的使用: trigger() 方法触发被选元素的指定事件类型。trigger() 方法触发被选元素的指定事件类型。trigger() 方法触发被选元素的指定事件类型。
- 选择改变有默认值的效果
`
请选择:
男:
女:
提交
var feedbackCfg = {
'0': {
label: 'haha',
placeholder: '11',
value: ''
},
'1': {
label: '33',
placeholder: '33',
value: ''
}
};
$(".feedbackCnt").css({
"display": "none"
})
$(".div").css({
"margin": "0 auto",
"width": "400px",
"height": "400px",
"background": "#e7e7e7"
});
var sd = $(".div").find('input[type="radio"]');
sd.on("click", function (event) {
if (event.target.checked) {
console.log(feedbackCfg);
$(".feedbackCnt").show();
$("label").eq(0).html(feedbackCfg[event.target.value].label);
feedbackCfg[event.target.value === "1" ? "0" : "1"].value = $("textarea").val();
$("textarea").attr('placeholder', feedbackCfg[event.target.value].placeholder).val(feedbackCfg[event.target.value].value);
}
})`
- 判断JS对象是否拥有某属性
两种方式:
(1). in 运算符
var obj = {name:'jack'};
alert('name' in obj); // --> true
alert('toString' in obj); // --> true
可看到无论是name,还是原形链上的toString,都能检测到返回true。
(2). hasOwnProperty 方法
var obj = {name:'jack'};
obj.hasOwnProperty('name'); // --> true
obj.hasOwnProperty('toString'); // --> false
`
2017/5/24
- 动态添加的元素获取不到,绑定事件失败(采用deleget live绑定元素事件,用each遍历document元素)。
`
$(document).on("click",".btnDel",function(){
$(this).parent().remove();
});`
- select中option的清空(用is()方法)
`
$(document).find(".open .selectpicker").each(function(i,ele){
$(ele).children("li").each(function(j,el){
if($(el).is(".selected")){
$(el).removeClass("selected");
$(".pull-left").html("没有一项被选中");
$("button.selectpicker").attr("title","没有一项被选中");
}
})
})`。
- 模态框关闭时传值未结束,提前关闭问题(采用hide.bs.modal解决)。
`
$('#myModal').on('hide.bs.modal', function () {
})`
模态框打开时时执行事件
`
$(".modal").on("shown.bs.modal", function (){
})`
2017/5/27
- 获取form表单时,将数据转化为json字符串 ,报错
解决方法:JSON.stringify()
方法 将数组,对象转成json
- 行内标签设置display:block后采用float布局,又有横行的margin的情况,ie6间距bug
解决方法:在display:block;
后面加入display:inline;display:table;
2017/6/1
- idea安装配置tomcat时,do nothing ,导致idea有时重启服务不能更新文件(重新配置tomcat update classes and resources)
2017/6/2
vue.js中 组件先注册,才能使用,如果反过来会报错。
-
路由嵌套会将其他组件渲染到该组件,而不是进行整个页面跳转router-view本身就是将组件渲染到该位置,要进行页面跳转,就要将页面渲染到根组件,在起始配置路由:
var App = Vue.extend({ root });
router.start(App,'#app')
;
2017/6/6
- 使用jQuery的ajax异步请求时,后台的代码执行成功,不执行success回调,但却执行error回调函数。
解决方法:费了好大的劲才发现在ajax执行send方法之前,就已经访问了一次后台。纳闷呀。
经过分析前台代码发现当使用ajax的事件源是button(button在form中,默认是自动提交的)或href时,使用Jquery的Ajax时就会出现这种问题,最后将Button加上了一个type="button"该问题就解决了。开心飞起。。。。
- 处理object,json方法:
`
function _json2str(o) {
var arr = [];
var fmt = function(s) {
if (typeof s == 'object' && s != null && s != 'null') return _json2str(s);
return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s;
};
var fmt2 = function(s) {
if (typeof s == 'object' && s != null && s != 'null') return _json2str(s);
return s;
};
for (var i in o)
{
console.log(i);
console.log("o",o);
arr.push("" + fmt(o[i].attr("name")) + ":" + fmt2(o[i].val()));
}
return '{' + arr.join(',') + '}';
}`
2017/6/9
- 返回json对象:
function isArray(object){
return object && typeof object==='object' && Array == object.constructor;
}
-
判断对象(数组:是否为空数组)
`
function isEmpty(value) { return (Array.isArray(value) && value.length === 0) || (Object.prototype.isPrototypeOf(value) && Object.keys(value).length === 0);}`
判断某个对象是不是数组
`
function isArray(obj) {
return obj && ( typeof obj === 'object') && (obj.constructor == Array);}`
//eleNum变量初始值为0,用来统计数组元素个数
var eleNum = 0;
//递归计算某个数组元素是不是下一维数组,如果是,则继续递归下去;如果不是,统计元素个数。
function recursion(obj) {
if (isArray(obj)) {
for (var j = 0; j < obj.length; j++) {
if (!isArray(obj[j])) {
eleNum++;
continue;
}
recursion(obj[j]);
}
} else {
eleNum++;
}
}
//arr为要计算数组元素个数的一维或多维数组,通过调用递归函数recursion返回数组元素个数
function getArrNElementNum(arr) {
if (arr == null) {
return 0;
}
recursion(arr);
return eleNum;
}
2017.6.26
- 人大项目中问题:每次遍历编号查询时都会出现两次那边,时间查询也是。
问题所在:遍历时用了"||",导致其中一个为true也会再次遍历。
解决方法:采用单个遍历元素
`
if($(elem).is("input[name=minCode]")){
textArray.push($(elem).parent().parent().find("label").html()+':大于'+$("input[name=minCode]").val());
}if($(elem).is("input[name=maxCode]")){
textArray.push($(elem).parent().parent().find("label").html()+':小于'+$("input[name=maxCode]").val());
}if($(elem).is("input[name=userYearStart]")){
textArray.push($(elem).parent().parent().find("label").html()+':大于'+$("input[name=userYearStart]").val());
}if($(elem).is("input[name=userYearEnd]")){
textArray.push($(elem).parent().parent().find("label").html()+':小于'+$("input[name=userYearEnd]").val());
}`
- miniui中的不需要的元素可以将其display:none
2017.6.27
1、 采用bootstarp中form-group代替ul>li布局人大项目中基本查询和高级查询。
解决:小屏设备,单条100%宽度的变化问题,行列对齐问题
2017.6.28
- 如果你的参数不确定 那么最好的方法就是传入一个函数 在返回一个执行这个函数的函数 也就是函数编程思想 这个执行函数还可以绑定这对象的作用域 这样灵活性就大大提高了
`
var obj = {
a: 'a',
test:function(fn){
return function(...args) {
fn.apply(this, args)
}.bind(this)
}
}
var newFn = obj.test(function(b) {
console.log(this.a + b)
})
newFn("dz")
// 相当于obj + 'b'`
2017.6.30
- jsonp跨域问题
`
function handleResponse(response) {
alert("you are at IP address " + response.ip + ", which is in " + response.city + ", " + response.region_name);
}
var script = document.createElement("script");
script.src = "http://freegeoip.net/json/?callback=handleResponse";
document.body.insertBefore(script, document.body.firstChild);
$(function () {
$(" ", {
"class": "test",
"text": "jquery1.8",
"click": function () {
$(this).toggleClass("text");
}
}).appendTo("body")
})
`
- js中的localstion方法
//简单跳转
`
function gotoPage(url) {
var url ="url?catalogid="+catalogID;
window.location =url;
}`
//为单个页面传递参数
`
function goto_catalog(iCat) {
if(iCat<=0) {
top.location = "url";
} else {
window.location ="url?catid="+iCat;
}
}`
// 对指定框架进行跳转页面
`
function goto_iframe(url) {
parent.mainFrame.location ="url";
} `
2017.7.14
position 定位元素,如果子级元素层级要高于父级,父级就不能设置position。子级:
position:absolute/relative/fixed,z-index:1;
兼容所有浏览器的渐变:
`
.gov .mini-layout-region-center .mini-layout-region-body{
width: 100%;
background: -moz-linear-gradient(top, #21618e 0%, #0dbd74 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#21618e), color- stop(100%,#0dbd74));
background: -webkit-linear-gradient(top, #21618e 0%,#0dbd74 100%);
background: -o-linear-gradient(top, #21618e 0%,#0dbd74 100%);
background: -ms-linear-gradient(top, #21618e 0%,#0dbd74 100%);
background: linear-gradient(to bottom, #21618e 0%,#0dbd74 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#21618e',endColorstr='#0dbd74',GradientType=0 );
}
:root .gradient{filter:none;
width: 100%;
}`
- mini-col布局:间隔可以在col-12里面再layout-row中分,margin:"间隔值
`
人大建议
未确定承办单位
[12](http://www.jianshu.com/writer)
.......`
2017.8.3
- 跨页面数据获取数据:子页面需要获取到form表单中的数据回显,但是base.js中的mounted,无法获取到,所以要通过list表格中的当前行数据获取传入form表单。子页面添加deps:[{key:"data"}]模块,并且扩展方法,list页面直接调用。
用法实例:form 页面:
`
var ebapForm = ebapBase.get({
id:'form',
key: 'form',
settings:{
save: "/noticeInfo/save",
set: "/noticeInfo/findById"
},
deps: [
{
key: 'pcc.data',
}
],
mounted: function (moduleIns) {
var depsData=moduleIns.moduleDeps.pccdata;
var form=moduleIns.getIns();
mini.parse();
return $.extend(moduleIns, {
setRowsData: depsData.setRowsData,
getRowsData: depsData.getRowsData,
perform: function(){
mini.get("fileupload").setText(ebapForm.getRowsData("filename")); //将文件名set进上传的input框中(在进行数据回显的时候)
mini.get("delFileId").setValue(ebapForm.getRowsData("id"));
//$(".fileVersion").attr("id",mini.getbyName("uploadFileUid").getValue());
},
delFile:function () {
},
})
}
});
var ebapList = ebapBase.get({
id: 'datagrid',
key: 'list',
settings:{
add:"/noticeInfo/form",
edit:"/noticeInfo/form",
del: "/noticeInfo/delete?id=",
},
openCfg:{
width: 800,
height: 210,
},
created: function(ins) {
if (ins) {
ins.reload();
ins.on('drawcell', function (e) {
var record = e.record,
column = e.column,
field = e.field,
value = e.value;
if (field == "title") {
e.cellStyle = "font-weight:bold;cursor:pointer;"
e.cellHtml = '[' + value + '](javascript:void(0))';
}
});
}
},
mounted: function (moduleIns) {
var grid = moduleIns.getIns();
ebapUtils.eventProxy({
context: $('.gov'),
tagName: 'a',
cls:"ebap-showEdit" ,
cb: function(targetInfo) {
var id = grid.getSelected().id;
ebapList.edit({
edit:{
title:'回复通知单',
mode:{
url:'/noticeInfo/noticeUnitForm?id='+id,
},
callback: function(opts) {
opts.context.ebapForm.setRowsData(opts.selectedRows);
opts.context.ebapForm.preOnloadForm();
}
}
});
}
});
return $.extend(moduleIns, {
fuzzyquery: ebapUtils.fuzzyquery,
openmenu: ebapUtils.columnfilter(grid).toggle,
search:function() {
var key = mini.get("key").getValue();
grid.load({ loginName: '%' + key + '%' });
}
});
}
});`
2017.8.20
- $.fn.test=text function(){}
注释:【在 jQuery 中,fn 其实就是 JavaScript 中 propotype 的一个别名,$ 是 jQuery 的别名,所以
$.fn.pluginName 等同于 jQuery.prototype.pluginName】,扩展jquery方法所用。
用法:`
$.fn.setRedText = function() {
return $(this).css("color", "red");
};`
$("p").setRedText();`
2017.8.24
- 监听打开的弹窗,关闭后刷新页面
`
function openWin(url,text,winInfo){
var winObj = window.open(url,text,winInfo);
var loop = setInterval(function() {
if(winObj.closed) {
clearInterval(loop);
//alert('closed');
parent.location.reload();
}
}, 1);
}`
2017.11.17(丰台quzhenfu项目-上传文件)
- 文件上传功能在IE中的兼容(前端文件大小限制,ie10以上或者非IE)
`
var userAgent = navigator.userAgent;
var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器
var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
reIE.test(userAgent);
var fIEVersion = parseFloat(RegExp["$1"]);
if(!isIE || fIEVersion>=10){
if(inputFile.files.length > 0 && inputFile.files[0].size>(4*1024*1024)){
ebapUtils.tipbox({
type:"warning",
msg:"附件大小不能大于4MB!"
});
return;
}
}`
2017.11.29(北京shizhenfu项目-承办单位选择)
1.默认树选择最后一级可以选中,父级选中没有默认不能选中,提交不能有空字段。(思路:遍历树节点:是否含有该字段)
`
adds:function (number) {
var node = this.config.$tree.getSelectedNode();
if (node.hasOwnProperty("pid")) {
var ids = [], texts = [];
ids.push(node.id);
texts.push(node.text);
var data = {};
data.id = ids.join(",");
data.text = texts.join(",");
var gridDataLength=this.config.$grid.getData().length;
var gridData=this.config.$grid.getData();
var boolean=false;
var items = mini.clone(data);
if(number == null){
for (var i = 0;i
if (gridData[i].id == items.id) {
boolean=true;
}
}
if(gridDataLength.length > number){
alert("您最多可以选"+number+"项");
}else{
for (var i = 0;i
if (gridData[i].id == items.id) {
boolean=true;
}
}
if( boolean==false){
this.config.$grid.addRow(data);
}
}
}else {
alert("您最多可以选"+number+"个承办单位,如果要选择多个承办单位,请联系政府用户。");
}
}
}
}`
- 跨页面传值,提交树节点值。
`
GetData:function () {
var data = this.config.$grid.getData();
var ids = [], texts = [];
for (var i = 0, l = data.length; i < l; i++) {
var node = data[i];
ids.push(node.id);
texts.push(node.text);
}
var data = {};
data.id = ids.join(",");
data.text = texts.join(",");
return data;
}`
2017.12.12(北京shizhenfu项目-主办多文件跨页面上传文件)
- 遍历所有 array[{"key":value}],去重
`
function uniq(array){
var unique = {};
array.forEach(function(gpa){ unique[ JSON.stringify(gpa) ] = gpa });
array = Object.keys(unique).map(function(u){return JSON.parse(u) });
return array;
}`
- 生成array[{name:{"key":value}}.....]
var array=[];var data={};var filename=iframe.contentWindow.ebapForm.getFileName();data.inputFile=iframe.contentWindow.$("#fileupload > input:file")[0];data.inputValue=iframe.contentWindow.mini.get("fileupload").getValue();console.log(fileId)
- 检测对象中是否含有某个元素(i.hasOwnProperty(ch)):
`
removeFile:function(i){
$(i).parent().remove();
var ch=$(i).parent().attr("id");
fileArray.forEach(function(i){
if(i.hasOwnProperty(ch)){
fileArray.remove(i);
}
});
},`
2017.12.15
- 遮罩拖拽
(1)原生:
`
if(document.getElementById('theme-popover')) {
var theme= document.getElementById('theme-popover');
theme.onmousedown = function(ev) {
var oevent = ev || event;
var distanceX = oevent.clientX - theme.offsetLeft;
var distanceY = oevent.clientY - theme.offsetTop;
document.onmousemove = function (ev) {
var oevent = ev || event;
theme.style.left = oevent.clientX - distanceX + 'px';
theme.style.top = oevent.clientY - distanceY + 'px';
};
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
};}}`
(2)jquery:
`
$(document).mousedown(function(){
$(this).mousemove(function(e){
$("#theme-popover").css({ "left": e.pageX+"px", "top": e.pageY+"px" });
$(document).mouseup(function(){
$(this).unbind('mousemove');
})
})
});`
2017.12.26
- Array.concat() 方法用于连接两个或多个数组http://www.w3school.com.cn/jsref/jsref_concat_array.asp.
eg: data.recodeList=data.recodeList.concat(ret.data.recode)
; concat() 方法用于连接两个或多个数组。
2017.12.27renda建议公开
移动端开发,IOS、iPhone,表单input元素获取焦点时页面被放大的解决办法。
ie8下a标签中的图片出现边框
解决:img{border:none;}