1. 程式人生 > >【轉載】工作中遇到的js問題以及問題的解決方案

【轉載】工作中遇到的js問題以及問題的解決方案

height 方案 線程 rap NPU click 創建 chan 包括

Js執行機制,主線程,和隊列任務:

// 無論js中有多少代碼,最終都是要通過js引擎去執行 // 異步代碼都是瀏覽器引擎去控制的,(定時器計時,和ajax請求,都是由瀏覽器引擎控制的)也就是管定時器秒數走,還有請求ajax和捕捉事件發生 當異步代碼的事件觸發了(比如定時器時間到了,用戶觸發了事件,還有ajax請求成功了),那麽就會把事件的回調函數,放到隊列任務中,當js引擎空閑後,就會去把隊列任務中的函數,拿到js引擎中,讓js引擎去執行。//:備註:定時器,還有ajax請求,都是瀏覽器引擎去操作的,每當js引擎在執行的時候遇到一個定時器/ajax,js引擎就會告訴瀏覽器去開一個線程去控制定時器/ajax,,然後js引擎就會跳過ajax/定時器,接著執行下面的代碼; 用戶的操作事件
(比如點擊,等等),都是有一個單獨的引擎實時監控著;名稱叫做,瀏覽器事件引擎,當用戶觸發了頁面的某個元素後事件後,瀏覽器事件引擎就會把事件所對應的回調函數,放到任務隊列中,等待js引擎去執行 元素. body.scrollTop = 300;網頁被卷出去的高或者左,為異步, 這句話的概念是會先負值,但滾動條不會立馬滾動,而是會1秒之後滾動; 備註:以上3中(定時器,ajax,和用戶的行為所觸發的事件),都是屬於異步 重要:異步的含義是:瀏覽器重新開個線程,主線程接著往下執行。 獲取元素的offsetWidth,clientWidth,scrooHeight的註意事項: 2點影響條件:
1,創建的元素,必須把他放進html結構中,才能獲取到寬度; 2 , 第二,元素必須是顯示的,如果元素是display:none的話,則獲取不到; InnerHTML = 值,只接受字符串,系統會將字符串轉換為dom元素對象; Window.onload ;當頁面有(異步事件),往頁面渲染dom元素的時候,如果js需要獲取dom元素的話,js外圍必須包上window.onload = function(){ 獲取元素代碼 } 數組和對象的相同點,無論是js還是php:   數組和對象都是key,value形式的;   數組[key] 獲取到value;   對象.key 獲取到value;   換句話說,一個key對應一個value 帶確定,取消按鈕的彈出框,點擊確定將執行事件的默認執行,
取消,則不執行事件的默認行為: 如果你寫成onclick="function(){returtn confirm(‘彈出框所顯示的文字 ‘)}"也可以,但是默認總是是返回True,確定、取消都無效. 如果你寫成onclick="function(){return confirm(‘ 彈出框所顯示的文字‘)}"加了return就相當於加了一個確定、取消的開關,如果是確定,就return True,反之return False; Return true 就會執行事件的默認行為 Return false; 就會取消事件的默認行為; From表單提交註意事項:   Form表單中加上enctype="multipart/form-data" 說明,後臺可以接受到file上傳的圖片,如果不加enctype="multipart/form-data" 後臺則無法獲取到傳給後臺的圖片;   註意點:   1: 同一個file控件<input type=”file”/> 連續重復讀取了同一個文件,則第二次及以後,則讀取不出來,讀取出來就是個空字符串,   2:一個form表單中,有多個file控件<input type=”file” name=”file”/> 。並且控件的name名字都一樣,那麽當使用form表單提交的時候,提交的是最後一個讀取的文件(也就是最後一個操作的file控件他所 讀取的文件)。   3:當使用file文件控件 上傳(圖片或者其他文件)的時候,是先把(圖片或者其他文件)存到了file文件控件中,然後才傳送給後臺,當file文件控件 存入了用於上傳的文件後,就會觸發file控件的onchange事件; 註意:以上僅僅是將文件保存到了file文件控件中,還並沒有提交給後臺; Textarea標簽 多行文本控件:註意事項   1:不支持直接在html中直接寫value;就是寫了也不會顯示value的值;   2 : 可以用js動態寫value,這樣則會顯示;   3: 支持value屬性和innerHTML屬性,無論寫那個,都是會顯示寫入的文本;   4: value的優先級要大,value可以覆蓋innerhtml;但innerhtml無法覆蓋value   5: 使用value可以獲取innerhtl的值,但innerHTML ,則無法獲取value的值;   6:Textarea.inerhtml中,只允許直接寫文本,不允許寫標簽,就算是寫了標簽也不會解析成html元素,另外,文字在textarea中是怎麽寫的,他就怎麽顯示,例如:   技術分享圖片   頁面上顯示為   技術分享圖片 技術分享圖片   Js中獲取textarea.innerHTML/value 中的文字,顯示為   技術分享圖片   7 : 往textarea元素中寫入的時候,建議用inenrHTML, 獲取的時候用value; 多個script標簽之中的變量或者函數互相調用詳解 多個script標簽共用一個window對象,每個script標簽裏面代碼執行完畢之後,才會進入下一個script標簽中去執行,並且每個script標簽,都會有預解析的情況, 但預解析的時候,都是提升到第1個script標簽的頂部,無論下方到多少個script標簽,變量提升的時候,都是提升到第1個script標簽的頂部。 第0個script標簽裏面也可以用任何script標簽裏面的變量或者函數,只要代碼執行的時候,變量和函數,已經被聲明,那麽就可以使用; 再次提醒:變量和函數提升的時候,都是提升到第0個script標簽的頂部。    渲染頁面技巧   1:A視圖中的js 、css 放到A視圖中,B視圖中的js 、css放到B視圖中;   2:A頁面中的ajax請求B視圖中的html、css、js, 然後渲染到A頁面中,實現局部(更新A頁面);   3: 先後臺執行,再前臺執行;   4:瀏覽器是執行html,css,js的;   5 : 如果將css寫在style標簽中, js寫在script標簽則css和js也屬於html,瀏覽器執行的時候,是先將style標簽中的css和script標簽中的js當成html渲染到頁面上,然後再將style標簽中css按照樣式執行,以及script標簽中js按照行為執行。   如果css是用style標簽引入到頁面中的,則就不會將style標簽引入的css當成html來渲染到頁面中了, 則是直接當成樣式執行。   如果js是用script標簽引入到頁面中的,則就不會將script標簽引入的js當成html來渲染到頁面中了, 則是直接當成行為執行。 js解決 獲取瀏覽器url中文編碼問題:   decodeURIComponent( %E6%9C%AC );解碼, 解成中文的;   encodeURIComponent( 文字); 編碼, 將中文文字給編碼,編碼後變成這種形式-》%E6%9C%AC。 document.write()方法可以用在兩個方面: 1.頁面載入過程中,用腳本加入新的頁面內容: 技術分享圖片技術分享圖片 2.用延時腳本創建本窗口或新窗口的新的內容 , 替換掉窗口之前的所有內容: : 在載入內容渲染完畢後(不包括所有js),瀏覽器輸出流自動關閉。在此之後,任何一個對當前頁面進行操作的document.write()方法將打開—個新的輸出流,它將清除當前頁面內容(包括源文檔的任何變量或值)。因此,假如希望用腳本生成的HTML替換當前頁面,就必須把HTML內容連接起來賦給一個變量,使用一個document.write()方法完成寫操作。

【轉載】工作中遇到的js問題以及問題的解決方案