avascript添加事件、移除事件、阻止冒泡、阻止瀏覽器默認(rèn)行為等寫法(兼容IE/FF/CHROME)
添加事件
var addEvent=function( obj, type, fn ) {
if (obj.addEventListener)
obj.addEventListener( type, fn, false );
else if (obj.attachEvent) {
obj["e"+type+fn]=fn;
obj.attachEvent( "on"+type, function() {
obj["e"+type+fn].call(obj, window.event);
} );
}
};
使用方法:
window.onload=function(){
var it=document.getElementsByTagName("input")[0];
addEvent(it,'click',f1);
}
移除事件
var removeEvent=function( obj, type, fn ) {
if (obj.removeEventListener)
obj.removeEventListener( type, fn, false );
else if (obj.detachEvent) {
obj.detachEvent( "on" +type, obj["e"+type+fn] );
obj["e"+type+fn]=null;
}
};
阻止事件(包括冒泡和默認(rèn)行為)
var stopEvent=function(e){
e=e || window.event;
if(e.preventDefault) {
e.preventDefault();
e.stopPropagation();
}else{
e.returnValue=false;
e.cancelBubble=true;
}
},
僅阻止事件冒泡
var stopPropagation=function(e) {
e=e || window.event;
if (!+"\v1″) {
e.cancelBubble=true; //否則,我們得使用IE的方法來(lái)取消事件冒泡
} else {
e.stopPropagation(); //因此它支持W3C的stopPropation()方法
}
}
!+"\v1″的理解:
其實(shí)就是利用各瀏覽器對(duì)轉(zhuǎn)義字符"\v"的理解
在ie瀏覽器中,"\v"沒(méi)有轉(zhuǎn)義,得到的結(jié)果為"v"
而在其他瀏覽器中"\v"表示一個(gè)垂直制表符(一定程度上相當(dāng)于空格)
僅阻止瀏覽器默認(rèn)行為
var preventDefault=function(e) {
e=e || window.event;
if(e.preventDefault) {
e.preventDefault();
}else{
e.returnValue=false;
}
}
取得事件源對(duì)象
var getEventTarget=function(e){
e=e || window.event;
var target=event.srcElement ? event.srcElement : event.target;
return target;
}
附:綁定onpropertychange事件
onpropertychange, 它在一個(gè)元素的屬性發(fā)生變化的時(shí)候觸發(fā), 一般用在表單元素中捕獲其value值改變, 它比onchange事件更實(shí)時(shí)捕獲它的改變,
不過(guò)為微軟私有事件。FF大致和它相似的有oninput事件, 不過(guò)它只針對(duì)textfield與textarea的value屬性。
safari, firefox, chrome與opera都支持此事件。
多人都說(shuō)HTML是一門很簡(jiǎn)單的語(yǔ)言,看看書,看看視頻就能讀懂。但是,如果你完全沒(méi)有接觸過(guò),就想通過(guò)看一遍教程,背背標(biāo)簽,想要完全了解HTML,真的有點(diǎn)太天真了。
HTML中文“超文本標(biāo)記語(yǔ)言”,英文名叫HTML沒(méi)有變量,沒(méi)有循環(huán),沒(méi)有函數(shù),只是單純的一門靜態(tài)語(yǔ)言而已。你可以用來(lái)描述靜態(tài)的東西,比如標(biāo)題、段落、圖片。
1)HTML通常被稱為靜態(tài)網(wǎng)頁(yè)。
2)HTML的一些標(biāo)簽代碼規(guī)則將內(nèi)容呈現(xiàn)在瀏覽器中所需的風(fēng)格。
3)HTML可以使用記事本創(chuàng)建,并以.html為擴(kuò)展名保存。
打開瀏覽器,例如打開百度的首頁(yè)
這個(gè)頁(yè)面非常的簡(jiǎn)潔,但是包含了很多內(nèi)容,有文字、圖片、動(dòng)畫、超鏈接等一系列HTML頁(yè)面所能夠包含的元素。什么意思,也就是說(shuō),HTML頁(yè)面就是能夠包含文本、圖像、聲音、超鏈接等內(nèi)容的集合,然后通過(guò)瀏覽器對(duì)這些元素進(jìn)行渲染,就呈現(xiàn)出多彩的頁(yè)面。
打開頁(yè)面的審查元素(快捷鍵是【F12】),就能夠看到構(gòu)成HTML頁(yè)面的所有元素,當(dāng)我們?cè)趯戫?yè)面,對(duì)頁(yè)面進(jìn)行調(diào)試的時(shí)候,也是通過(guò)審查元素,在這個(gè)窗口里面檢測(cè)問(wèn)題,所以審查的方法一定要掌握。
一個(gè)HTML頁(yè)面最基本框架。
優(yōu)點(diǎn)
易于使用,松散的語(yǔ)法(雖然,過(guò)于靈活的將不符合標(biāo)準(zhǔn)),HTML還允許使用模板,這使設(shè)計(jì)網(wǎng)頁(yè)變得容易、對(duì)Web設(shè)計(jì)領(lǐng)域的初學(xué)者來(lái)說(shuō)非常有用。幾乎所有瀏覽器都支持該功能。被廣泛使用的; 建立在幾乎所有網(wǎng)站上。與XML語(yǔ)法非常相似,后者已越來(lái)越多地用于數(shù)據(jù)存儲(chǔ)。免費(fèi)-無(wú)需購(gòu)買任何軟件,即使對(duì)于新手程序員而言,都易于學(xué)習(xí)和編碼。
缺點(diǎn)
由于它是一種靜態(tài)語(yǔ)言,它不能單獨(dú)產(chǎn)生動(dòng)態(tài)輸出。有時(shí),HTML文檔的結(jié)構(gòu)難以掌握。程序錯(cuò)誤可能會(huì)導(dǎo)致高昂的代價(jià)。它只能創(chuàng)建靜態(tài)頁(yè)面和普通頁(yè)面,因此如果我們需要?jiǎng)討B(tài)頁(yè)面,則HTML無(wú)效。需要編寫大量代碼來(lái)制作簡(jiǎn)單的網(wǎng)頁(yè)。您必須跟上已棄用的標(biāo)記,并確保不要使用它們,因?yàn)槌霈F(xiàn)了另一種與HTML兼容的語(yǔ)言代替了標(biāo)記的原始工作。因此需要學(xué)習(xí)其他語(yǔ)言(大多數(shù)情況下是CSS)HTML提供的安全功能受到限制。
在了解這么多之后,一定想要自己寫個(gè)HTML頁(yè)面試試手,那么HTML頁(yè)面怎么寫呢,用什么工具來(lái)寫呢?在電腦上建立一個(gè)hello.txt的文件,將下面的代碼粘貼復(fù)制進(jìn)去保存 。
然后將后綴名修改為.html,用瀏覽器在頁(yè)面上看到hello world字樣的輸出,這就是第一個(gè)HTML頁(yè)面。
今天我們就先分享到這里啦,趕快去練練手吧~(私信我有免費(fèi)IT課程可以領(lǐng)取喲)
什么會(huì)有瀏覽器兼容問(wèn)題
瀏覽器兼容性問(wèn)題,是指因?yàn)椴煌臑g覽器標(biāo)準(zhǔn)不同對(duì)同一段代碼的解析有差異或者是統(tǒng)一瀏覽器由于版本的不同,導(dǎo)致支持的特性不一樣,造成頁(yè)面顯示效果不一致。在大多數(shù)情況下,我們的需求是,無(wú)論用戶用什么瀏覽器來(lái)查看我們的頁(yè)面,都應(yīng)該是統(tǒng)一的效果,所以需要一些方法讓他的頁(yè)面顯示效果一致。
部分兼容問(wèn)題解決方案
問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的內(nèi)外邊距不同
//解決方案: *{margin:0;padding:0;}
問(wèn)題二:圖片默認(rèn)有間距
解決方案:使用float屬性為img布局(問(wèn)題一中提到的通配符不起作用)
問(wèn)題三:li之間有間距
解決方法:li設(shè)置vertical-align:middle
問(wèn)題四:標(biāo)簽最低高度設(shè)置min-height不兼容
解決方案:設(shè)置一個(gè)標(biāo)簽的最小高度200px
p{min-height:200px; height:auto !important; height:200px; overflow:visible; }
問(wèn)題五:ie各個(gè)版本的hack
//類內(nèi)部hack: .header {_width:100px;} /* IE6專用*/ .header {*+width:100px;} /* IE7專用*/ .header {*width:100px;} /* IE6、IE7共用*/ .header {width:100px\0;} /* IE8、IE9共用*/ .header {width:100px\9;} /* IE6、IE7、IE8、IE9共用*/ .header {width:330px\9\0;} /* IE9專用*/ //選擇器Hack: *html .header{} /*IE6*/ *+html .header{} /*IE7*/
問(wèn)題六:常見(jiàn)屬性的兼容情況
問(wèn)題七:clear float
.clearfix:after{ content: ''; display: block; clear: both; } .clearfix{ *zoom: 1; /* 僅對(duì)ie67有效 */ }
可能用到的技巧和工具
條件注釋 (conditional comment) 是于HTML源碼中被IE有條件解釋的語(yǔ)句。條件注釋可被用來(lái)向IE提供及隱藏代碼。
<!--[if IE 6]> <p>You are using Internet Explorer 6.</p> <![endif]--> <!--[if !IE]><!--> <script>alert(1);</script> <!--<![endif]--> <!--[if IE 8]> <link href="ie8only.css" rel="stylesheet"> <![endif]-->
IE條件注釋法(即HTML條件注釋Hack):針對(duì)所有IE(注:IE10+已經(jīng)不再支持條件注釋): <!--[if IE]>IE瀏覽器顯示的內(nèi)容 <![endif]-->,針對(duì)IE6及以下版本:<!--[if lt IE 6]>只在IE6-顯示的內(nèi)容 <![endif]-->。這類Hack不僅對(duì)CSS生效,對(duì)寫在判斷語(yǔ)句里面的所有代碼都會(huì)生效。
能力檢測(cè)的目標(biāo)不是識(shí)別特定的瀏覽器,而是識(shí)別瀏覽器的能力。使用這種方式無(wú)需顧及瀏覽器如何如何,只需確定瀏覽器是否支持特定的能力,就可以給出相關(guān)的方案。
//特性檢測(cè) if (object.propertyInQuestion) { //使用object.propertyInQuestion }
瀏覽器IE8及以下IE版本對(duì)HTML5標(biāo)簽的支持是有限的,我們可以通過(guò)在網(wǎng)頁(yè)中添加腳本的方式來(lái)解決目前IE瀏覽器對(duì)HTML5支持的問(wèn)題。
<!–[if IE]> <script src=”http://html5shiv.googlecode.com/svn/trunk/html5.js”></script> <[endif]–>
Respond.js讓不支持css3 Media Query的瀏覽器包括IE6-IE8等其他瀏覽器支持查詢兼容響應(yīng)式布局
css reset重置樣式,清除瀏覽器默認(rèn)樣式,并配置適合設(shè)計(jì)的基礎(chǔ)樣式(強(qiáng)調(diào)文本是否大多是粗體、主文字色,主鏈接色,主字體等)。reset 的目的,是將所有的瀏覽器的自帶樣式重置掉,這樣更易于保持各瀏覽器渲染的一致性。例如 yui3 reset 中的一段:
ol, ul {list-style: none} h1, h2, h3, h4, h5, h6 {font-size: 100%;font-weight: normal}
Normalize.css 是一個(gè)可定制的 CSS 文件,使瀏覽器呈現(xiàn)的所有元素,更一致和符合現(xiàn)代標(biāo)準(zhǔn);是在現(xiàn)代瀏覽器環(huán)境下對(duì)于CSS reset的替代。 它正是針對(duì)只需要統(tǒng)一的元素樣式。該項(xiàng)目依賴于研究瀏覽器默認(rèn)元素風(fēng)格之間的差異,精確定位需要重置的樣式。 這是一個(gè)現(xiàn)代的,HTML5-ready 的 CSS 重置樣式集。bootstrap就使用了它,github的地址為:https://github.com/necolas/normalize.css/, Normalize.css做了以下幾件事:
Modernizr
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。