成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

有關placeholder在ie9中的一點折騰

Warren / 3323人閱讀

摘要:屬性定義屬性規(guī)定可描述輸入字段預期值的簡短的提示信息比如一個樣本值或者預期格式的短描述。問題來源屬性給予了用戶很友好的提示,但是在老版本的瀏覽器中就不會起作用及之前的版本不支持屬性,這是一個很頭疼的問題,于是就產(chǎn)生了以下的思考。

有關placeholder在ie9中的一點折騰。

placeholder屬性定義: placeholder 屬性規(guī)定可描述輸入字段預期值的簡短的提示信息(比如:一個樣本值或者預期格式的短描述)。

問題來源: placeholder屬性給予了用戶很友好的提示,但是在老版本的瀏覽器中就不會起作用(Internet Explorer 9 及之前的版本不支持 placeholder 屬性),這是一個很頭疼的問題,于是就產(chǎn)生了以下的思考。

解決思路

判斷瀏覽器是否支持placeholder屬性

"placeholder" in document.createElement("input")

獲取當前頁面中的所有具有placeholder屬性的元素

document.querySelectorAll("[placeholder]")

由于document.querySelectorAll返回的是一個 NodeList 對象,需要將其通過Array.prototype.slice.call()將其轉換成數(shù)組,這樣我們就可以通過數(shù)組的forEach()方法對頁面中獲取到的所有元素進行遍歷

Array.prototype.slice.call(document.querySelectorAll("[placeholder]"))

對獲取到的頁面中的所有具有placeholder屬性的元素進行遍歷

nodes.forEach()

根據(jù)當前元素克隆出一個一樣的克隆節(jié)點(備注:這里的思想是這樣的,克隆出一個一樣的節(jié)點插入到當前節(jié)點的后面,當瀏覽器不支持placeholder屬性的時候,需要顯示placeholder屬性的信息,就將克隆節(jié)點顯示出來,將當前節(jié)點隱藏掉)

var cloneNode = item.cloneNode()

判斷節(jié)點的類型,如果節(jié)點的類型[type="password"],就將克隆節(jié)點的類型改為text

if (cloneNode.getAttribute("type").toLowerCase() === "password") {
  cloneNode.setAttribute("type", "text")
}

將克隆節(jié)點的placeholder屬性值,寫入value;并將此克隆節(jié)點隱藏

cloneNode.setAttribute("value", cloneNode.getAttribute("placeholder"))
cloneNode.style.display = "none"

將克隆節(jié)點插入到當前節(jié)點的后面

item.insertAdjacentHTML("afterend", cloneNode.outerHTML)

對克隆節(jié)點綁定focus事件,當克隆節(jié)點獲取焦點時,將克隆節(jié)點隱藏,并將當前節(jié)點顯示出來,并將當前節(jié)點獲取焦點

item.nextSibling.addEventListener("focus", function () {
  this.style.display = "none"
  this.previousSibling.style.display = "inline"
  this.previousSibling.focus()
})

對當前節(jié)點綁定focus事件,當前節(jié)點獲取焦點時,將緊跟在當前節(jié)點后面的克隆節(jié)點隱藏掉

item.addEventListener("focus", function () {
  this.nextSibling.style.display = "none"
})

對當前節(jié)點綁定blur事件,當前節(jié)點失去焦點時,如果當前節(jié)點沒有進行任何輸入,則需要對齊進行placeholder提示,這時就將當前節(jié)點隱藏,將緊跟在當前節(jié)點后面的克隆節(jié)點顯示出來

item.addEventListener("blur", function () {
  if (!this.value) {
      this.style.display = "none"
      this.nextSibling.style.display = "inline"
  }
})

在頁面初始化完成后,判斷當前節(jié)點是否有初始輸入值,如果沒有的話,將當前節(jié)點隱藏,將緊跟在當前節(jié)點后的克隆節(jié)點顯示出來

if (!item.value) {
  item.style.display = "none"
  item.nextSibling.style.display = "inline"
}

整體思路圖示

整體代碼
  if (!("placeholder" in document.createElement("input"))) {
      // 將返回的nodeList對象轉為數(shù)組
      var nodes = Array.prototype.slice.call(document.querySelectorAll("[placeholder]"))
      nodes.forEach(function (item, index) {
          item.addEventListener("focus", function () {
              this.nextSibling.style.display = "none"
          })
          item.addEventListener("blur", function () {
              if (!this.value) {
                  this.style.display = "none"
                  this.nextSibling.style.display = "inline"
              }
          })
          var cloneNode = item.cloneNode()
          // 如果[type="password"]類型,則轉為text
          if (cloneNode.getAttribute("type").toLowerCase() === "password") {
              cloneNode.setAttribute("type", "text")
          }
          cloneNode.setAttribute("value", cloneNode.getAttribute("placeholder"))
          cloneNode.style.display = "none"
          item.insertAdjacentHTML("afterend", cloneNode.outerHTML)
          item.nextSibling.addEventListener("focus", function () {
              this.style.display = "none"
              this.previousSibling.style.display = "inline"
              this.previousSibling.focus()
          })
          if (!item.value) {
              item.style.display = "none"
              item.nextSibling.style.display = "inline"
          }
      })
  }

由于本人學識有限,有很多需要提升的地方,望大家多多指教。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/91819.html

相關文章

  • 前端_JavaScript

    摘要:為此決定自研一個富文本編輯器。例如當要轉化的對象有環(huán)存在時子節(jié)點屬性賦值了父節(jié)點的引用,為了關于函數(shù)式編程的思考作者李英杰,美團金融前端團隊成員。只有正確使用作用域,才能使用優(yōu)秀的設計模式,幫助你規(guī)避副作用。 JavaScript 專題之惰性函數(shù) JavaScript 專題系列第十五篇,講解惰性函數(shù) 需求 我們現(xiàn)在需要寫一個 foo 函數(shù),這個函數(shù)返回首次調用時的 Date 對象,注意...

    Benedict Evans 評論0 收藏0
  • 轉:CSS :placeholder-shown偽類實現(xiàn)Material Design占位符交互效果

    摘要:轉自偽類實現(xiàn)占位符交互效果一規(guī)范中占位符交互效果風格占位符交互效果官方示意見此頁面。我們可以采用絕對定位最后,對這個元素在輸入框時候,以及非顯示的時候進行重定位縮小并位移到上方四清除按鈕部分上是必要屬性,配合偽類實現(xiàn)我們的效果。 轉自: https://github.com/yougola/bl... CSS :placeholder-shown偽類實現(xiàn)Material Design占...

    gaara 評論0 收藏0
  • getComputedStyle方法的那些事

    摘要:返回的是一個樣式聲明對象,只讀。方法返回一個最初值對象或值列表對象,這取決于屬性值的類型。而且,雖然中,對象支持方法,但總是返回因此,目前來講,方法可以先不聞不問。本文轉載之張鑫旭的博客 一、getComputedStyle是?getComputedStyle是一個可以獲取當前元素所有最終使用的CSS屬性值。返回的是一個CSS樣式聲明對象([object CSSStyleDeclara...

    Baoyuan 評論0 收藏0
  • getComputedStyle方法的那些事

    摘要:返回的是一個樣式聲明對象,只讀。方法返回一個最初值對象或值列表對象,這取決于屬性值的類型。而且,雖然中,對象支持方法,但總是返回因此,目前來講,方法可以先不聞不問。本文轉載之張鑫旭的博客 一、getComputedStyle是?getComputedStyle是一個可以獲取當前元素所有最終使用的CSS屬性值。返回的是一個CSS樣式聲明對象([object CSSStyleDeclara...

    W_BinaryTree 評論0 收藏0

發(fā)表評論

0條評論

Warren

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<