`
uule
  • 浏览: 6307696 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

JS总结(二)

    博客分类:
  • 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('abc@abc.com','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毫秒就扫描一次,可以自己调整
    }
}
 。。。

 

 五、借助锚点实现多次锚定

var i=0;
function toPrice(objname){
	var mao = "curmo"+i;
	$(".curmodou").attr("id",mao);
	i++;
	window.location.hash = "#"+mao;
       
	//window.location.hash = "#curmo";
	$("#"+objname).focus();
	return false;
}

 注意直接跳转到锚定 #curmo 会无法跳转,需要将 # 独立出来锚定

 

六、禁用页面弹窗

禁用alert是浏览器的事情,如果要使当前页面alert失效,把alert定义为空函数即可。

window.alert=function(){};

 

七、JS引用

方法一,在调用文件的顶部加入下例代码:

 

document.write(”<script language=javascript src=’/js/import.js’></script>”);

(注:有时你引用的文件还可能需要引用其他的js,我们需要将需要的那个js文件也以同样的方法引用进来)

 

方法二,通过中间界面对js进行应用

 

就是我们可以在某个html中引用了你需要的js文件,我们可以通过拿到那个html文件的对象,然后在通过这个对象去引用js的方法。

(一般不常用,这个在我做项目的时候用过一次)

 

方法三:在将下边代码放入Body中:

 

new_element=document.createElement(”script”);

new_element.setAttribute(”type”,”text/javascript”);

new_element.setAttribute(”src”,”import.js”);

document.body.appendChild(new_element);

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics