Skip to content

Instantly share code, notes, and snippets.

View JobbyM's full-sized avatar
🎯
Focusing

JobbyM

🎯
Focusing
View GitHub Profile
@JobbyM
JobbyM / 45.js
Created July 5, 2017 07:06
监控HTTP 上传进度
// 查找所有含有“fileDropTarget” 类的元素
// 并注册DnD 事件处理程序使它们能响应文件的拖放
// 当文件放下时,上传它们到data-uploadto 属性指定的URL
whenReady(function(){
var elts = document.getElementsByTagName("fileDropTarget");
for (var i = 0; i < elts.length; i++) {
var target = elts[i];
var url = target.getAttribute("data-uploadto");
if(!url) continue;
createFileUploadDropTarget(target, url)
@JobbyM
JobbyM / 44.js
Last active July 5, 2017 03:29
用于HTTP 请求的编码对象
/**
* 编码对象的属性
* 如果它们是来自HTML 表单的名/值对,使用application/x-www-form-urlencoded 格式
*/
function encodeFormData(data){
if(!data) return ""; // 一直返回字符串
var pairs = []; // 为了保存名=值对
for(var name in data){ // 为每个名字
if(!data.hasOwnProperty(name)) continue; // 跳过继承属性
if(typeof data[nam] === "function") continue; // 跳过方法
@JobbyM
JobbyM / 43.js
Created July 5, 2017 01:34
overrideMimeType不要把响应作为XML 文档处理
// 不要把响应作为XML 文档处理
request.overrideMimeType("text/palin; charset=utf-8");
@JobbyM
JobbyM / 42.js
Last active July 5, 2017 01:34
取得响应
// 发出一个HTTP GET请求以获得指定URL 的内容
// 当响应成功到达,验证它是否是纯文本
// 如果是,把它传递给指定回调函数
function getText(url, callback){
var request = new XMLHttpRequest(); // 创建新请求
request.open("GET", url); // 指定待获取的URL
request.onreadystatechange = function(){ // 定义事件处理程序
// 如果请求完成, 则它是成功的
if(request.readyState === 4 && request.status === 200){
var type = request.getResponseHeader("Content-Type");
@JobbyM
JobbyM / 41.js
Created July 4, 2017 07:25
键盘快捷键的Keymap 类
/*
* Keymap.js 绑定键盘事件和处理程序函数
*
* 这个模块定义一个Keymap 类
* 这个类的实例表示按键标识符(下面有定义)到处理程序函数的映射
* Keymap 能配置到HTML 元素上以处理keydown 事件
* 当此类事件发生时,Keymap 会使用它的映射来调用合适的处理程序
*
* 当创建Keymap 时,
* 能传入一个JavaScript 对象,它表示Keymap 绑定的初始设置
@JobbyM
JobbyM / 40.js
Created July 4, 2017 01:08
使用propertychange 事件探测文本输入
function forceToUpperCase(element){
if(typeof element === "string") element = document.getElementById(element);
element.oninput = upcase;
element.onpropertychange = upcaseOnPropertyChange;
// 简单案例:用于input 事件的处理程序
function upcase(event) { this.value = this.value.toUpperCase(); }
// 疑难案例:用于propertychange 事件的处理程序
function upcaseOnPropertyChange(event){
@JobbyM
JobbyM / 39.js
Created July 4, 2017 00:56
过滤用户输入
/*
* InputFilter.js 不唐突地过滤<input> 元素的键盘输入
*
* 这个模块查找文档中拥有“data-allowed-chars” 属性的所有<input type="text"> 元素
* 它为所有这类元素都注册keypress、textInput 和textinput 事件处理程序,
* 来限制用户只能输入出现在许可属性值中的字符
* 如果<input> 元素也有一个“data-messageid” 属性,
* 那么认为这个值是另一个文档元素的id
* 如果用户输入了不允许的字符,那么会显示消息元素
* 如果用户输入了允许的字符,那么会隐藏消息元素
@JobbyM
JobbyM / 38.js
Created July 3, 2017 07:08
当文档准备就绪时调用函数
/*
* 传递函数给whenReady(),当文档解析完毕且为操作准备就绪 时,
* 函数将作为文档对象的方法调用
* DOMContentLoaded、readystatechange 或load 事件发生时会触发注册函数
* 一旦文档准备就绪,所有函数都将被调用,任何传递给whenReady 的函数都将立即调用
*/
var whenReady = (function(){ // 这个函数返回whenReady() 函数
var funcs = []; // 当获得事件时,要运行的函数
var ready = false; // 当触发事件处理程序时,切换到true
@JobbyM
JobbyM / 37.js
Created July 3, 2017 02:37
事件取消
function cancelHandler(event){
var event = event || window.event; // 用于IE
/* 这里是处理事件的代码 */
// 现在取消事件相关的默认行为
if(event.preventDefault) event.preventDefault(); // 标准技术
if(event.returnValue) event.returnValue = false; // IE
return false; // 用于处理使用对象属性注册的处理程序
}
@JobbyM
JobbyM / 36.js
Created July 3, 2017 00:16
事件处理程序的运行环境
/*
* 在指定的事件目标上注册用于处理指定类型事件的指定处理程序函数
* 确保处理程序一直作为事件目标的方法调用
*/
function addEvent(target, type, handler){
if(target.addEventListener)
target.addEventListener(type, handler, false)
else
target.attachEvent("on" + type, function(event){
// 把处理程序作为事件目标的方法调用