JavaScript常见小问题

阅读:373 2019-03-19 14:40:11 来源:开源中国

1.form的onsubmit

elemform.submit();不会触发表单的onsubmit事件

2.根据name属性获取html页面对象,这个也适用于id,注意大小写,javascript对大小写敏感

alert(document.all.aaa.value);

javascript中的css改变

document.getelementbyid("p2").style.color="blue";

3.js常见事件处理

事件就是用户或浏览器自身执行的某种动作,如click,laod,mouseover都是事件的名称。

事件流描述的是从页面中接收事件的顺序。

事件处理程序就是对事件作出响应的函数。事件处理程序的名字以“on”开头,

如click事件对应的事件处理程序的名称为onclick。为事件指定处理程序的方式有多种,

如:html事件处理程序、dmo0级事件处理程序、

dom2级事件处理程序、ie事件处理程序、跨浏览器事件处理程序。

当产生一个事件时,就会产生一个事件流,这个留从父组件开始向子组件流去,这个过程叫做捕获阶段。当找到发出事件的子组件时叫做目标阶段然后事件流会从目标组件反向流向父组件,这个过程叫冒泡阶段。三个阶段都可以相应事件。

(1)html事件处理程序

即:将事件处理程序,写在相应的html标签中。

eg:

缺点:①存在一个时间差,当用户在html元素一出现在页面上就去触发相应的事件时,

事件的处理程序可能还不具备执行条件(比如说调用的函数还木有被解析),

就会引发错误。eg:

functionmessage(){

alert("helloworld");

}

因为调用的函数处于按钮的下方,如果在message函数被加载之前就点击了按钮就会引发错误。

②html和js代码耦合度太高,如果要改变事件处理程序,就要改动两个地方:html代码和javascript代码。

(2)dmo0级事件处理程序

eg:

varbtn=document.getelementbyid("mybtn");

btn.onclick=function(){alert(this.id)};

注意:如果这段代码位于按钮之后,就有可能在一点时间内怎么点击都木有反应,

因为在这段代码运行以前不会指定事件处理程序。

dmo0级事件处理程序被认为是元素的方法,换句话说,

dmo0级事件处理程序是在元素的作用域中运行的,

所以程序中的this引用当前元素。可以在事件处理程序中通过this访问元素的任何属性和方法。

以这种方式添加的事件处理程序会在事件流的冒泡阶段被处理。

也可删除指定的事件处理程序,只要将事件处理程序的属性设置为null就ok了。

eg:

btn.onclick=null;将处理程序设置为null以后,再点击按钮不会发生任何动作。

(3)dom2级事件处理程序

dom2级事件定义了两个方法,用于指定和删除事件处理程序。

这两个操作分别为:addeventlistener()和removeeventlistner().所有的dom节点都包含这两个方法。

他们要接受3个参数,分别为:要处理的事件名,处理函数,布尔值。

最后的布尔值参数如果为ture,表示在捕获阶段处理程序,如果为false,表示在冒泡阶段调用事件处理程序。

例如在按钮上为click添加事件处理程序,可以用下面的代码:

varbtn=document.getelementbyid("mybtn");

btn.addeventlistner("onclick",function(){alert("helloworld");false});

这里添加的事件处理程序也是依附于元素的的作用域

使用dom2事件处理程序的优点是:可以为同一个元素添加多个事件处理程序。

例:varbtn=getelementbyid("mybtn");

btn.addeventlistner("click",function(){alert(this.id);},flase);

btn.addeventlistner("click",function(){alert("helloworld");},flase);

结果:先显示id,后显示helloworld。

通过addeventlistner()添加的事件处理程序只能通过removeeventlistner来删除。

移除时使用的参数与添加事件处理程序的参数相同。

另:通过addeventlistner添加的匿名函数无法删除。

(4)ie事件处理程序。

ie添加和删除事件处理程序的函数分别为:attachevent()和detachevent();

这两个函数接收相同的两个参数:事件处理程序名与事件处理函数。

由于ie只支持事件冒泡,所以通过attachevent添加的事件处理程序都会添加到冒泡阶段。

例如:varbtn=document.getelementbyid("mybtn");

btn.attachevent("onclick",function(){alert("helloworld");});

ie在使用attachevent方法的情况下,事件处理程序的作用域为全局作用域,

因此this等于window。(在编写跨浏览器的代码时,记住这一点非常重要)。

与addeventlistner类似,attachevent()方法也可以用来为一个元素添加多个事件处理程序;

eg:

varbtn=document.getelementbyid("mybtn");

btn.attachevent("onclick",function(){alert("clicked");});

btn.attachevent("onclick",function(){alert("helloworld");});

值得注意的是:这些事件的处理程序是按逆序触发的,也就是说,先弹出helloworld再弹出clicked。

detach()使用方法略。

(5)跨浏览器的事件处理程序

为了以跨浏览器的方式处理事件,主要可以使用两个方法:

①使用能隔离浏览器差异的js库。

②自己编写最适合的事件处理方法。这里要用到能力检测,

即:识别浏览器的能力。要保证代码能在大多数浏览器下一致的运行,只须关注冒泡阶段。

代码步骤如下:

首先要创建的方法是addhandler(用于处理跨浏览器的兼容性问题,这里没有给出具体代码),

它的职责是视情况判定使用dom0级方法,dom2级方法,ie方法来添加事件。

addhandler接收3个参数:要操作的元素、事件名称、事件处理程序函数。

这个方法属于一个名叫eventutil的对象。这里使用这个对象来处理浏览器之间的差异。

与addhandler对应的方法是removehandler(),它也接受相同的参数。

这个事件的职责是移除之前添加的事件处理程序。

不论事件是以什么方式添加到对象中的,如果其他方法程序无效,则默认使用dom0级方法。

使用eventutil的方法如下:varbtn=document.getelementbyid("mybtn");

varhander=function(){alert("hello")};//事件处理程序

eventutil.addhandler(btn,"onclick",handler);

//其他代码

eventutil.removehandler(btn,"onclick",handler);

addhandler()和removehandler()没有考虑到所有的浏览器问题,

例如ie中作用域的问题,但是使用它们添加和移除事件处理程序还是足够了。

(6)onload和onunload事件

onload和onunload事件会在用户进入或离开页面时被触发。

navigator.cookieenabled==true检测浏览器是否启用cookie

(7)onmouseover和onmouseout事件onmousedown、onmouseup以及onclickonfocus

4.js输出html

//varform=document.forms[0];//获取form表单方法一varform=document.forms['myform'];//获取form表单方法二for(vari=0;i");//下面2方法,innerhtml属性只有根据id获取到的对象有此属性document.all.divs.innerhtml="";document.getelementbyid("divs").innerhtml="myfirstjavascript";//代码折行document.write("helloworld!");

5.js数据类型

除了基本类型外,值得注意的类型有:

对象:对象可以如下生成,同时varcarname=newstring();使用new的方式也可以生成对象

varperson={firstname:"bill",lastname:"gates",id:5566};

使用

name=person.lastname;name=person["lastname"];

通过new出来的对象可以赋给属性

varcarname=newobject();carname.name='xqqqq';alert(carname.name);

空以及不存在:

unifined,null

undefined这个值表示变量不含有值。

可以通过将变量的值设置为null来清空变量。

6、js对象(属性,方法)

js中同样纯在break、跳出循环

js中也有try{}catch{}

try{//在这里运行代码}catch(err){//在这里处理错误}

try{alert(aa);}catch(e){alert(e.message);//aaisnotdefined}

javascript中的throw命令事实上可以抛出任何对象,并且我们可以在catch接受到此对象。例如:try{thrownewdate();//抛出当前时间对象}catch(e){alert(e.tolocalestring());//使用本地格式显示当前时间}try{thrownewerror(10,"asdasdasd")}catch(e){alert(e.message);alert(e.description)alert(e.number)alert(e.name)thrownewerror(10,"asdasdasd")}

7.js节点,父子关系

//创建一个组件,p为组件varp=document.createelement("p");p.id='p1';//文本是一个textnodevarnode=document.createtextnode("xxxxxxxxx");//向p组件追加节点p.appendchild(node);//同时,组件可以被追加到其他组件中document.all.divs.appendchild(p);同理,可追加即可移除varchild=document.getelementbyid("p1");document.all.divs.removechild(child);

8.js正则表达式的使用

//正则表达式对象,拥有的方法是test,exec,complie//test检索字符串中的指定值。返回true或false。//exec检索字符串中的指定值。返回被找到的值。//如果没有发现匹配,则返回null。varpattern=newregexp('he');alert(pattern.test("the"));//输出true,包含healert(pattern.exec('the'));//输出he//查找字符串中所有此字符的时候varpattern2=newregexp('e','g');varresult="";do{result=pattern2.exec('wewewerwerwerew');alert(result);}while(result!=null)//complie改变检索条件varpatt1=newregexp("e");document.write(patt1.test("lifearefree"));patt1.compile("x");document.write(patt1.test("lifearefree"));//输出true和false

正则表达式:

1.匹配正整数:/^[0-9]*[1-9][0-9]*$/

2.匹配非负整数(正整数+0):/^d+$/

3.匹配中文:/^[u4e00-u9fa5]/

4.匹配email:/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/

5.匹配网址url:/^(f|ht){1}(tp|tps)://([w-]+.)+[w-]+(/[w-./?%&=]*)?/

6.匹配字母开头,5-16字符,字母数字下划线:/^[a-za-z][a-za-z0-9_]{4,15}$/

7.匹配数字,字母,下划线,中文:/^[u4e00-u9fa5a-za-z0-9_]+$/

8.匹配中国邮政编码:/^[1-9]d{5}$/

9.匹配ip地址:/b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)b/

10.匹配中国大陆身份证:/^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}(d|x|x)$/

varstr="abc@126.com";varpreg=/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/;//匹配emailif(preg.test(str)){varmsg="匹配成功";}else{varmsg="匹配失败!";}alert(msg);

9.jswindow

所有浏览器都支持window对象。它表示浏览器窗口。

所有javascript全局对象、函数以及变量均自动成为window对象的成员。

全局变量是window对象的属性。

全局函数是window对象的方法。

甚至htmldom的document也是window对象的属性之一:

获取window长宽

varw=window.innerwidth||document.documentelement.clientwidth||document.body.clientwidth;varh=window.innerheight||document.documentelement.clientheight||document.body.clientheight;

window.open()-打开新窗口window.close()-关闭当前窗口window.moveto()-移动当前窗口window.resizeto()-调整当前窗口的尺寸

10.jslocation

location.hostname返回web主机的域名location.pathname返回当前页面的路径和文件名location.port返回web主机的端口(80或443)location.protocol返回所使用的web协议(http://或https://)

加载新的页面:window.location.assign("http://www.w3school.com.cn")

上一篇: HTTP报文简单介绍
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服