JavaScript相关知识和经验的碎片化记录
1、JavaScript提示“未结束的字符串常量”错误解决方法
1.1 JavaScript引用时,使用的字符语言不一致.
比如:<script type=”text/javascript” src=”xxx.js”
charset=”UTF-8″>.xxx.js文件内部使用的是GB2312的格式,外面调用使用的是UTF-8,所以文件内部部分特殊字符因为格式不一致,出现乱码,造成此原因.
1.2 JavaScript输出HTML字符时,前后标记不匹配.
这种比较常见,往往在输出字符串时,出现单引号(')或双引号(”)不配对,或者是在document.write()的时候,没有正确输出单引号(')或双引号(")
1.3 参数内出现HTML标记语言或包含换行符
如:一般测试时只使用单行的数据,是正常的,未出现这个错误,
当测试时使用多行数据,并使用回车链换行,就出行了此错误.因为里面包含了换行符
对于第1.3种情况,解决方法是:不直接将该数据以参数形式传递,而是先将其赋值在一个隐藏的文本内,需要调用的函数里只需读取该文本里的内容即可。
2、jQuery.form插件库中的Ajaxsubmit插件在文件上传时的问题(IE10)
$(‘#id’).ajaxsubmit({
…,
iframe:true, //不考虑ie的版本,都使用iframe来进行文件的上传
…
});
经实验:在IE8和IE9中,,默认通过iframe进行文件上传,而在IE10中,如果没有设置参数iframe为true时,默认是通过fileapi进行文件上传的。
注:该问题的出现是在笔者的项目中应用时出现的(受其它项目组用户控件的影响),经实验,在一个新建的空白页面中使用时不会出现在IE10中通过默认的fileapi进行文件上传会失败的问题。
3、jquery 中的 $("#id") 与 document.getElementById("id") 的区别
var canvas_air=$('#air'); alert(canvas_air);
alert(document.getElementById('air'));
两个alert()分别显示为:[object Object]和[object HTMLCanvasElement]
实际上,$('#air')[0]等同于$('#air').get(0),还等同于 document.getElementById('air')
4、一次元素的单击事件被触发进而多次执行事件处理函数,该问题产生原因是元素被多次绑定单击事件
问题详细说明:
$('#id').event(function(){}); //该语句被执行n次后,则id='id'的元素的event事件就被注册了n次,因此,触发该元素event事件时,会导致执行n次的事件处理函数
该问题解决办法多种多样,笔者目前使用的方法是:
$('#id').off('event').event(function(){}); //先移除元素的事件event,再重新注册event事件
5、通过JavaScript使页面中的文本内容不能被选中
<div class="ui_test" onselectstart="javascript:return false;" unselectable="on"><p>文本内容</p></div>
6、获取图片的原始宽高
//获取图片的原始宽高
function getImageNatural(src, fcallback) {
//$("<img/>")这里是创建一个临时的img标签,类似js创建一个new Image()对象
$('<img/>').attr('src', src).load(function () {
//如果要获取图片的真实的宽度和高度有三点必须注意
//1、需要创建一个image对象:如这里的$("<img/>")
//2、指定图片的src路径
//3、一定要在图片加载完成后执行如.load()函数里执行
fcallback({ 'realWidth': this.width, 'realHeight': this.height, 'AspectRatio': this.width / this.height });
});
}
7、JavaScript模块化的规范
- CommonJS规范
CommonJS是一个更偏向于服务器端的规范。模块是同步加载的,当要用到该模块了,现加载现用,这种同步机制到了浏览器里边就有问题了,浏览器同步加载模块会导致性能、可用性、调试和跨域访问等问题,所以说该规范更偏向于服务器端的应用。Node.js采用了这个规范。 根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象。
- AMD规范
AMD规范实现异步加载依赖模块,并且会预加载,偏向于浏览器端的模块化规范。AMD和CommonJS是兼容的,只要稍稍调换一下调用方法就实现了同步加载
define(function (require, exports, module) {
var a = require('a'),
b = require('b');
exports.action = function () {};
});
AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
- CMD规范
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
同样Seajs也是预加载依赖js跟AMD的规范在预加载这一点上是相同的,明显不同的地方是调用,和声明依赖的地方。AMD和CMD都是用define和require,但是CMD标准倾向于在使用过程中提出依赖,就是不管代码写到哪突然发现需要依赖另一个模块,那就在当前代码用require引入就可以了,规范会帮你搞定预加载,你随便写就可以了。但是AMD标准让你必须提前在头部依赖参数部分写好。这就是最明显的区别。
8、JQuery中通过ajax请求 Web API 时,传递被Asp.net(C#)后台标记为 [FromBody]的参数需要注意:
$.ajax({
type: "POST",
contentType: "application/json",
url: sWebAPIUrl + '/api/AnswerAndKnowledge/Lg_Marking_SetAnswers',
data: JSON.stringify({
sItemId: oItemInfo.sItemId, nShortAnswerFlag: oItemInfo.nShortAnswerFlag,
sSubjectName: oItemInfo.sSubjectName, AnswersInfo: oAnsSetInfoArr
}),
success: function(rdata){
console.log(rdata);
}
});
注意:Ajax请求需要一起设置 data:JSON.stringify(json对象) 和 contentType: "application/json" 才可以正确请求到后台数据。
9、使用array.push()方法产生的问题,循环将json对象压入数组中时所有的元素都一致(全都为循环最后一次所赋的值)
错误用法:
var obj = { id: null, name: ''};
var str = [];
for (var i = 0; i < 5; i++) {
obj.id = i;
obj.name = 'name_' + i;
str.push(obj);
console.info(obj);
}
console.info(str);
正确用法:
var str = [];
for (var i = 0; i < 5; i++) {
var obj = {id: i, name: 'name_' + i,};
str.push(obj);
console.info(obj);
}
console.info(str);
原因:对象是同一个对象,动态创建对象时,不断对对象赋值,push进数组,数组[obj,obj,obj],所有的obj值相同,因而导致数组中都是同一个对象??????
10、各浏览器对Cookie有一定的限制,在使用时需要格外注意
各浏览器对cookie的不同限制:
IE6.0 IE7.0/8.0/9.0+ Opera FF Safari Chrome
cookie个数 每个域为20个 每个域为50个 每个域为30个 每个域为50个 没有个数限制 每个域为53个
cookie大小 4095个字节 4095个字节 4096个字节 4097个字节 4097个字节 4097个字节
总之,在进行页面cookie操作的时候,应该尽量保证cookie个数小于20个,总大小小于4KB
11、基于String的原型重写trim()方法,使得trim()方法能够去掉字符串首末的特定字符
String.prototype.trim = function (char, type) {
if (char) {
if (type == 'left') {
return this.replace(new RegExp('^\\' + char + '+', 'g'), '');
} else if (type == 'right') {
return this.replace(new RegExp('\\' + char + '+$', 'g'), '');
}
return this.replace(new RegExp('^\\' + char + '+|\\' + char + '+$', 'g'), '');
}
return this.replace(/^\s+|\s+$/g, '');
};
12、禁用或启用页面滚动条(未隐藏,避免因窗口的宽度变大而导致抖动)
// 禁用或启用滚动条
(function (window) {
var keys = { 37: 1, 38: 1, 39: 1, 40: 1 }; function preventDefault(e) {
e = e || window.event;
//阻止默认事件
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
} function preventDefaultForScrollKeys(e) {
e = e || window.event;
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
} var oldonwheel, oldonmousewheel1, oldonmousewheel2,
oldontouchmove, oldonkeydown, isDisabled; function disableScroll() {
if (window.addEventListener) { // older FF
window.addEventListener('DOMMouseScroll', preventDefault, false);
}
oldonwheel = window.onwheel;
window.onwheel = preventDefault; // modern standard oldonmousewheel1 = window.onmousewheel;
window.onmousewheel = preventDefault; // older browsers, IE
oldonmousewheel2 = document.onmousewheel;
document.onmousewheel = preventDefault; // older browsers, IE oldonkeydown = document.onkeydown;
document.onkeydown = preventDefaultForScrollKeys;
isDisabled = true;
} function enableScroll() {
if (!isDisabled) return;
if (window.removeEventListener)
window.removeEventListener('DOMMouseScroll', preventDefault, false); window.onwheel = oldonwheel; // modern standard window.onmousewheel = oldonmousewheel1; // older browsers, IE
document.onmousewheel = oldonmousewheel2; // older browsers, IE document.onkeydown = oldonkeydown;
isDisabled = false;
} window.scrollHanlder = {
disableScroll: disableScroll,
enableScroll: enableScroll
};
}(window));
调用方式:
window.scrollHanlder.enableScroll(); // 启用
window.scrollHanlder.disableScroll(); // 禁用
......
JavaScript相关知识和经验的碎片化记录的更多相关文章
- React相关知识和经验的碎片化记录
React相关知识和经验的碎片化记录 1.Warning: validateDOMNesting(...): Whitespace text nodes cannot appear as a chil ...
- 开发工具Visual Studio使用相关知识和经验的碎片化记录
开发工具Visual Studio使用相关知识和经验的碎片化记录 1.Visual Studio提示"无法启动IIS Express Web服务器"的解决方法 有时,在使用Visu ...
- HTML相关知识和经验的碎片化记录
1.标签input在type="file"时,name是必须属性 <form id="MainFileUpload" name="MainFil ...
- WinForm(C#)相关知识和经验的碎片化记录
1.引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 出现"System.Windows.Forms.Ax ...
- windows cmd命令相关知识和经验的碎片化记录
1.循环遍历当前文件夹下的所有*.dll文件,并打印其绝对路径和相对路径 ``` for /f "tokens=*" %%a in ('dir /s/b/a-d "*.d ...
- IIS相关知识和经验的碎片化记录
1.IIS(Internet Information Services)网站本机可以访问,局域网其他机器无法访问 导致这个问题之一是防火墙规则,解决办法如下: [开始]打开[控制面板],选择[WIND ...
- AngularJs(v1)相关知识和经验的碎片化记录
1.利用angular指令监听ng-repeat渲染完成后执行脚本 http://www.cnblogs.com/wangmeijian/p/5141266.html 2.$http的POST请求中请 ...
- Asp.net相关知识和经验的碎片化记录
1.解决IIS7.0下“HTTP 错误 404.15 - Not Found 请求筛选模块被配置为拒绝包含的查询字符串过长的请求”问题 方案1:在程序的web.config中system.web节点里 ...
- SQL Server相关知识和经验的碎片化记录
1.在向服务器发送请求时发生传输级错误 在向服务器发送请求时发生传输级错误. (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接.) ---> Sy ...
随机推荐
- 如何用visual studio2013编写简单C语言程序
vc++6.0 作为经典版本,虽然已经几乎淘汰,但还是有很多的初学者在使用.但当他们使用vs2013时会发现界面和操作和vc++6.0有了极大的不同,不知该如何 操作.随着vs2013的普及,更多人使 ...
- centos7 showdoc 安装部署
1.进入showdoc官网帮助目录下 https://www.showdoc.cc/web/#/help?page_id=828455960655160 阅读自动安装部署相关事项: 2.利用xshel ...
- [转]angular的路由机制
在谈路由机制前有必要先提一下现在比较流行的单页面应用,就是所谓的single page APP.为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而a ...
- javascript switch continue break 执行语句
1:switch 关键字段:switch(n).case.break.default switch(n) :n是一个表达式 或者是一变量,用来与其下的各种case进行匹配,比如:此时的day输出的是 ...
- 第四篇 PHP的成长路线
学PHP开发这么久,进步不大,个人进行了分析.认为是我自己没有设定目标,就是对于自己要学成什么样没有清晰的认识. 今天特别了解了一下PHP的成长参考路线,以便自己以后迷失方向.PHP主要应该基于MYS ...
- boost1_55_0编译和安装
1.在www.boost.org下载文件并解压 2.进行解压目录 2.1 编译前的配置工作 执行bootstrap.bat windows 使用vs2010: 修改\boost_1_55_0\too ...
- Unix文件指令-Mac终端命令应用
pwd:查看当前文件夹 cd: 打开文件夹 ls:列出当前路径下所有文件 ls -l :列出当前路径下的所有文件详细信息. mkdir: 新建文件夹 touch: 创建文件 eg: touch t ...
- vijos1098:合唱队形
描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…, ...
- 框架Mockito
一.什么是mock测试,什么是mock对象? 先来看看下面这个示例: 从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例. 一种替代方案就是使用mocks 从图 ...
- JCTF 2014(Misc)
小试身手: 点击下载附件 res/raw/hehe,打开 得到flag