JS总结(二)

一、jquery动态移除/增加onclick属性

 

设置onclick属性:$("a").attr("onclick","test();");

删除onclick属性:$("a").removeAttr("onclick");

 

理论上上面的代码没问题,但实际上上面语句不执行也不报错,后来发现原因:

jquery 1.6之前的版本并不支持attr()方法对标签onclick属性的相关操作!

换句话说要使用attr()方法操作标签中的onclick属性必须使用jq库1.6或更新的库版本!

 

二、Select没有readonly属性,只有disabled属性,如何设置readonly

 onfocus="this.defaultIndex=this.selectedIndex;" onchange="this.selectedIndex=this.defaultIndex;" style="color:gray"

 

三、Js参数值中含有单引号或双引号解决办法

 

<script type="text/javascript">

function Display(LoginEmail, UserName, ID) {

        alert(LoginEmail);

    }

</script>

 

1.使用单引号传参:

<a href="javascript:Display('[email protected]','Aleax Xie','10101239393')">Test1</a>

 

如果其中一个参数有一个值含有单引号,那么这个方法会出错.

<a href="javascript:Display('abc@a'bc.com','Aleax Xie','10101239393')">Test1</a>

 

 改进: 有单引号的加上\', OK。

<a href="javascript:Display('abc@a\'bc.com','Aleax Xie','10101239393')">Test</a>

 

 

2.上面解决了单引号的问题,但如果值中有双引号又出现了问题

<a href="javascript:Display('abc@a\'bc".com','Aleax Xie','10101239393')">Test</a>

 

改进: 使用Onclick,给双引号加上\",单引号不用处理.并且不加“或'给JS方法

 <a href="javascript:void(0)" onclick=Display("abc@\"ab'c.com","Aleax&nbsp;Xie","10101239393")>Test3</a>

 

这样解决了Js参数中有单引号与双引号的问题,但这有限制: 参数与参数之前不能有空格,参数值中不能空格,如果有空格,则用"&nbsp;"来代替.

 

四、window.print()打印base64图片问题

js打印window.print()图片打印

问题:window.print()打印时,因为window.print是异步的,所以存在图片没加载完就打印的情况。

导致图片不显示。

 

解决:判断图片是否加载完成,加载完成在调用打印。(直接.onload不行,当浏览器有 缓存时不会进入方法)

 

var t_img; // 定时器
var isLoad = true; // 控制变量(判断图片是否 加载完成)

isImgLoad(function(){//判断全部打印图片加载完成
            window.print();
            // 加载完成
        });

//判断图片加载的函数
function isImgLoad(callback){
    // 查找所有打印图,迭代处理
    $('.printImg').each(function(){
        // 找到为0就将isLoad设为false,并退出each
        if(this.height === 0){
            isLoad = false;
            return false;
        }
    });
    // 为true,没有发现为0的。加载完毕
    if(isLoad){
        clearTimeout(t_img); // 清除定时器
        // 回调函数
        callback();
    // 为false,因为找到了没有加载完成的图,将调用定时器递归
    }else{
        isLoad = true;
        t_img = setTimeout(function(){
            isImgLoad(callback); // 递归扫描
        },500); // 我这里设置的是500毫秒就扫描一次,可以自己调整
    }
}
 。。。

 

 

 

 

猜你喜欢

转载自uule.iteye.com/blog/2396455