【轉載】工作中遇到的js問題以及問題的解決方案
阿新 • • 發佈:2018-09-28
height 方案 線程 rap NPU click 創建 chan 包括 (比如點擊,等等),都是有一個單獨的引擎實時監控著;名稱叫做,瀏覽器事件引擎,當用戶觸發了頁面的某個元素後事件後,瀏覽器事件引擎就會把事件所對應的回調函數,放到任務隊列中,等待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執行機制,主線程,和隊列任務:
// 無論js中有多少代碼,最終都是要通過js引擎去執行 // 異步代碼都是瀏覽器引擎去控制的,(定時器計時,和ajax請求,都是由瀏覽器引擎控制的)也就是管定時器秒數走,還有請求ajax和捕捉事件發生 當異步代碼的事件觸發了(比如定時器時間到了,用戶觸發了事件,還有ajax請求成功了),那麽就會把事件的回調函數,放到隊列任務中,當js引擎空閑後,就會去把隊列任務中的函數,拿到js引擎中,讓js引擎去執行。//:備註:定時器,還有ajax請求,都是瀏覽器引擎去操作的,每當js引擎在執行的時候遇到一個定時器/ajax,js引擎就會告訴瀏覽器去開一個線程去控制定時器/ajax,,然後js引擎就會跳過ajax/定時器,接著執行下面的代碼; 用戶的操作事件【轉載】工作中遇到的js問題以及問題的解決方案