Jade Dungeon

Javascript 常用例子

页面动作

页面滚动

允许粘贴

有的网页不允许粘贴,尤其是密码框,强迫用户一个个字符输入,非常讨厌。 下面的Chrome插件,可以解决这个问题。

var allowPaste = function (e) {
	e.stopImmediatePropagation();
	return true;
}
documetn.addeventListener('paste', allowPaste, true)

禁止页面滚动

页面滚动失效:

$("body").css("overflow-y","hidden");

恢复页面滚动:

$("body").css("overflow-y","auto");

页面滚动到顶部

/**
 * 回到页面顶部
 * @param acceleration 加速度
 * @param time 时间间隔 (毫秒)
 **/
function goTop(acceleration, time) {
	acceleration = acceleration || 0.1;
	time = time || 16;
 
	var x1 = 0;
	var y1 = 0;
	var x2 = 0;
	var y2 = 0;
	var x3 = 0;
	var y3 = 0;
 
	if (document.documentElement) {
		x1 = document.documentElement.scrollLeft || 0;
		y1 = document.documentElement.scrollTop || 0;
	}
	if (document.body) {
		x2 = document.body.scrollLeft || 0;
		y2 = document.body.scrollTop || 0;
	}
	var x3 = window.scrollX || 0;
	var y3 = window.scrollY || 0;
 
	// 滚动条到页面顶部的水平距离
	var x = Math.max(x1, Math.max(x2, x3));
	// 滚动条到页面顶部的垂直距离
	var y = Math.max(y1, Math.max(y2, y3));
 
	// 滚动距离 = 目前距离 / 速度, 因为距离原来越小, 速度是大于 1 的数, 所以滚动距离会越来越小
	var speed = 1 + acceleration;
	window.scrollTo(Math.floor(x / speed), Math.floor(y / speed));
 
	// 如果距离不为零, 继续调用迭代本函数
	if(x > 0 || y > 0) {
		var invokeFunction = "goTop(" + acceleration + ", " + time + ")";
		window.setTimeout(invokeFunction, time);
	}
};

提交与跳转

远程访问

前端开发时模拟远程访问

前端开发时,用setTimeout模拟是在访问远程的API:

$.getJSON('/mock-data/get_post_list.json', function(data) {
	setTimeout(function() {
			console.log(data);
		}, 1000)
});

页面跳转

地址的跳转

url = url + "&sendTime=" + (new Date()).getSeconds();
url = encodeURI(url);
if( true == $('#toNewWindow').val() ) {
    window.open(url);
 } else {
    window.location = url;
    // document.location = url; //这样用了N年了
 }

jQuery修改表单提交目标

$("#myForm").attr('action', url);

jQuery请求提交

序列化表单并提交

var formData = $("#myForm").serialize();

可能给已经序列化的表单加上新的内容

formData = formData + "&id=001&name=Jade";

也可以手动建立内容

formData = {'id':'001' , 'name':'Jade'};

提交请求

$.post(url, formData,
    function(data, textStatus) {
        if('success' == textStatus ) {
            // 得到服务器成功响应
            // testStatus 为响应内容
        } else {
            // 提交失败
        }
    }
);

服务器端Java响应

response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(responseStr);

form中只要有任意<button>或者<input type="submit" />的按钮都会导致回车提交

上传的按钮改成这样

<input type="button" onclick="return ajaxFileUpload();" value="Upload" />`

就不会触发自动提交了。

替换onClick事件:

$(obj).unbind('click').removeAttr('onclick');
 
$(obj).bind("click",function(){
    like_old(itemId,obj);
});