标签 javascript 下的文章

keyup事件延迟处理

表单中keyup事件自动检索数据中,考虑性能需延迟处理按键事件,无需每次keyup均执行异步请求。
利用event的timeStamp来标记时间,这样每次的keyup事件都会修改last的值,注意last必需为全局变量。如果时间差为0(也就是你停止输入1s之内都没有其它的keyup事件发生)则执行。

需处理that=$(this);,否则报错Cannot read property 'toLowerCase' of undefined

基础代码如下:

var oldtime;
$('input[name=dept]').keyup(function(event){
    oldtime = event.timeStamp;
    that=$(this);
    setTimeout(function(){
        if((oldtime-event.timeStamp)==0){
            var name = that.val();
            $.ajax({
                url:"{:U('Dept/ajax_get_dept')}",
                type: "post",
                async: false,
                data: {'keyword':name},
                dataType:"html",
                success: function (data) {
                    console.log(data);
                }
            });
        }
    },500);
})

JS判断是否为微信浏览器 js关闭浏览器窗口

function is_weixin(){
    var ua = navigator.userAgent.toLowerCase();
    if(ua.match(/MicroMessenger/i)=="micromessenger") {
        return true;
     } else {
        return false;
    }
}
//如微信浏览器
if(is_weixin()){
    WeixinJSBridge.call('closeWindow');
}else{
    //需处理兼容
    window.close();
}

JavaScript手机振动API vibrate

判断浏览器对振动API的支持情况
var supportsVibrate = "vibrate" in navigator;
在window.navigator对象里就只有一个关于振动的API:vibrate。

navigator.vibrate函数可以接受一个数字参数,也可以接受一个数字数组,当使用数组参数时,奇数位的数值是震动秒数,偶数位为等待秒数。

// 振动1秒
navigator.vibrate(1000);

// 振动多次
// 参数分别是震动3秒,等待2秒,然后振动1秒
navigator.vibrate([3000, 2000, 1000]);
如果想停止震动,你只需要向navigator.vibrate方法里传入0,或一个空数组:

// 停止振动
navigator.vibrate(0);
navigator.vibrate([]);

对navigator.vibrate方法的调用并不会引起手机循环振动;当参数是一个数字时,振动之后发生一次,然后就停止下来。当参数是数组时,震动会按数组里的值震动,然后就停止振动。

持续震动

我们可以简单的使用setInterval 和 clearInterval 方法产生让手机持续震动的效果:

var vibrateInterval;

// Starts vibration at passed in level
function startVibrate(duration) {
    navigator.vibrate(duration);
}

// Stops vibration
function stopVibrate() {
    // Clear interval and stop persistent vibrating 
    if(vibrateInterval) clearInterval(vibrateInterval);
    navigator.vibrate(0);
}

// Start persistent vibration at given duration and interval
// Assumes a number value is given
function startPeristentVibrate(duration, interval) {
    vibrateInterval = setInterval(function() {
        startVibrate(duration);
    }, interval);
}

浏览器同源策略以及跨域手段

同源策略(Same origin policy)

同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。

那问题来了,如何合法规避浏览器的同源策略呢

跨域资源共享(CORS)

服务器端添加 Header 头信息,指定允许访问的源

以 PHP 语言为例

header("Access-Control-Allow-Origin: http://www.codefun.cn");
header("Access-Control-Allow-Credentials: true");
例如,上面的字段值将允许来自 http://www.codefun.cn 的请求

form表单中提示其中某项为空选项

思路:循环遍历不能为空的数据进行判断,提示对应的label

var check = true;
mui("#input_example input").each(function() {
    //若当前input为空,则alert提醒  
    if(!this.value || this.value.trim() == "") {
        var label = this.previousElementSibling;
        mui.alert(label.innerText + "不允许为空");
        check = false;
        return false;
    }
}); //校验通过,继续执行业务逻辑 
if(check){
    mui.alert('验证通过!')
}

js 判断一个字符在字符串中出现的次数

/**
 * 获取字符串s中出现re的次数
 *
 * @param      {(Function|string)}  re      正则式
 * @param      {string}             s       字符串
 * @return     {string}             出现次数
 */
function patch(re,s){
    re=eval("/"+re+"/ig"); //不区分大小写,如须则去掉i,改为 re=eval("/"+re+"/g")
    var len = s.match(re).length;
    return len;
}

方式2:
var s='jhdoiweesdds';
var n=(s.split('d')).length-1;