整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML+js響應鍵盤快捷鍵ctrl+s實現文章保存提交功能

          文章有
          ctrl+s一鍵提交的功能時候,真的是會方便很多,對于我們這些高度使用pc,并且熟悉PC快捷鍵的使用者來說,如何實現html響應ctrl+s快捷鍵,下面我分享一個簡單的代碼給大家。

          $(window).keydown( function (event) {
                  if(event.ctrlKey  &&  window.event.keyCode==83 ){
                      $("#submit").click()
                      return false
                  }
              }) ;

          當使用ctrl+s組合快捷鍵的時候,我們模擬了submit的點擊事件進行提交文章。

          、資源面板 source

          source區域

          source區域2

          1區域網站的資源文件,2區域網頁文件的代碼,3區域信息顯示及調試的地方。

          2、調試變量的console。

          console面板

          3、breakpoint斷點面板:

          breakpoint面板

          點擊3行右邊的breakpoint面板上代碼的位置。

          觀察面板

          watch:觀察js代碼中變量的值,+號添加變量的值

          call stack:查看js代碼函數調用情況

          scope:查看當前變量值

          4、調試和跟蹤:

          繼續執行,快捷鍵 F8.

          跳過函數執行下一條,快捷鍵F10

          執行下一條的函數,快捷鍵F11

          執行最近函數

          取消或設置斷點

          是否進行調試或停止

          通過按鈕,一步一步調試js代碼。

          剛學習 JS 的時候,總是聽過一個名詞:命名空間。當時對這個東西并不能夠很好的理解,命名為什么還會有空間呢?加上空間能有什么用處?

          其實在很多編程語言中,都有命名空間這個概念,它們自身就已經具備了很好的文件和包管理機制,通過 import include require 等等命令,能夠引入其他的模塊、包或者文件,從而避免文件之間的變量命名重復問題。

          然而在 JS 中,腳本文件是通過 script 標簽引入的,同時由于 JS 的變量和函數聲明的特殊性,一不小心就會造成環境污染,將一個變量或者屬性暴露在全局,或者被別的文件中的同名變量所覆蓋,于是就有了命名空間這樣一個概念。

          在 js 中,聲明變量時加上關鍵字和不加關鍵字是不一樣的,var arg = 1 這樣的聲明,arg 的作用域只在當前頁面或者當前的方法中;但是如果聲明時不加 var而是直接聲明 arg = 1 ,js 就會認為這是一個全局變量,即使它是在一個函數體中聲明的。

          /* a.js */
          var people = 'xiaoming'
          /* b.js */
          var people = {
           name: 'xiaohong',
           age: 18
          }
          /* index.html */
          <script src="./a.js"></script>
          <script src="./b.js"></script>
          console.log(people === 'xiaoming') // false
          

          在上面的代碼塊中,后引入頁面的 b.js 文件的 people 變量就覆蓋了 a.js 的 people 變量

          上面這種情況,通過命名空間我們就可以很好地解決:

          // 如果在 window 上沒有 ns 屬性,就將 ns 屬性掛載到 window 上,作為根空間存在
          if (!window.ns) window.ns = {}
          // 當我們需要聲明一個新的變量或者方法時,就可以添加到 ns 中,但是如果在 ns 上隨意添加,依然會出現覆蓋的情況,所以可以以文件為區分單位來添加
          /* a.js */
          var a = {}
          a.people = 'xiaoming'
          a.getPeopleName = function () {
           return a.people
          }
          ns.a = a
          /* b.js */
          var b = {}
          b.people = {
           name: 'xiaohong',
           age: 18
          }
          ns.b = b
          // 在頁面上引入上面兩個文件后,我們可以通過下面的方式來分開使用兩個 people
          console.log(ns.a.people)
          console.log(ns.b.people)
          // 通過上面的方法,也可以實現在已經引入的腳本中調用其他腳本的變量和方法
          /* c.js */
          // 如果 ns.a 存在,則調用它的 getPeopleName 方法
          ns.a && ns.a.getPeopleName()
          

          上面的代碼塊已經簡單的說明了命名空間的書寫方式,當然你也可以通過其他方式來確定命名空間的各級空間命名方式,比如根節點就可以模仿其他語言的方式,通過倒寫的域名來表示 com.google.www

          既然命名空間的主要作用是用來防止變量被覆蓋、污染全局環境,那么有沒有其他方式來實現這一的作用呢?

          最簡單的,通過立即執行函數就可以比較好的解決這個問題(前提是變量要用 var const let) 聲明:

          const moduleA = function () {
           // 私有變量、方法寫在函數體中
           const a = 1
           function func1 () {...}
           // 需要暴露出來的方法通過返回一個對象寫在 return 中
           return {
           b: 2,
           func2: () => {...}
           }
          } ()
          moduleA.a // 報錯
          moduleA.b // 2
          

          或者通過現在普遍使用的 require.js 等第三方庫,ES6 支持的 import 語法來實現模塊的引入,也可以防止模塊之間的變量覆蓋等情況出現。


          主站蜘蛛池模板: 亚洲精品伦理熟女国产一区二区 | 国产在线一区二区| 四虎永久在线精品免费一区二区| 中文字幕一区二区在线播放| 爆乳无码AV一区二区三区| 色狠狠AV一区二区三区| 日本一区二区三区中文字幕| 成人精品一区二区户外勾搭野战| 亚洲日韩国产精品第一页一区| 无码少妇一区二区浪潮av| 相泽南亚洲一区二区在线播放| 亚洲午夜电影一区二区三区| 香蕉久久av一区二区三区| 日本一区午夜艳熟免费| 国产伦精品一区二区三区视频猫咪 | 久久国产精品最新一区| 熟女少妇精品一区二区| 视频一区精品自拍| 中文字幕VA一区二区三区| 大屁股熟女一区二区三区| 国产成人高清精品一区二区三区| 国产日韩精品一区二区在线观看 | 国产成人一区二区三区在线观看| 国产波霸爆乳一区二区| 91精品一区国产高清在线| 综合久久一区二区三区| 久久精品一区二区国产| 久久亚洲国产精品一区二区 | 日本一区二区三区精品视频| 美日韩一区二区三区| 国产一区二区三区在线看片| 精品乱码一区内射人妻无码| 一区二区日韩国产精品| 欧洲精品无码一区二区三区在线播放 | 国产视频一区二区在线观看| 国产一区二区三区在线免费 | 国产成人亚洲综合一区| 日韩在线视频不卡一区二区三区 | 中日av乱码一区二区三区乱码| 久久99国产精一区二区三区| 99久久精品午夜一区二区|