摘要:屬性定義屬性規定可描述輸入字段預期值的簡短的提示信息比如一個樣本值或者預期格式的短描述。問題來源屬性給予了用戶很友好的提示,但是在老版本的瀏覽器中就不會起作用及之前的版本不支持屬性,這是一個很頭疼的問題,于是就產生了以下的思考。
有關placeholder在ie9中的一點折騰。
placeholder屬性定義: placeholder 屬性規定可描述輸入字段預期值的簡短的提示信息(比如:一個樣本值或者預期格式的短描述)。
解決思路問題來源: placeholder屬性給予了用戶很友好的提示,但是在老版本的瀏覽器中就不會起作用(Internet Explorer 9 及之前的版本不支持 placeholder 屬性),這是一個很頭疼的問題,于是就產生了以下的思考。
判斷瀏覽器是否支持placeholder屬性
"placeholder" in document.createElement("input")
獲取當前頁面中的所有具有placeholder屬性的元素
document.querySelectorAll("[placeholder]")
由于document.querySelectorAll返回的是一個 NodeList 對象,需要將其通過Array.prototype.slice.call()將其轉換成數組,這樣我們就可以通過數組的forEach()方法對頁面中獲取到的所有元素進行遍歷
Array.prototype.slice.call(document.querySelectorAll("[placeholder]"))
對獲取到的頁面中的所有具有placeholder屬性的元素進行遍歷
nodes.forEach()
根據當前元素克隆出一個一樣的克隆節點(備注:這里的思想是這樣的,克隆出一個一樣的節點插入到當前節點的后面,當瀏覽器不支持placeholder屬性的時候,需要顯示placeholder屬性的信息,就將克隆節點顯示出來,將當前節點隱藏掉)
var cloneNode = item.cloneNode()
判斷節點的類型,如果節點的類型[type="password"],就將克隆節點的類型改為text
if (cloneNode.getAttribute("type").toLowerCase() === "password") { cloneNode.setAttribute("type", "text") }
將克隆節點的placeholder屬性值,寫入value;并將此克隆節點隱藏
cloneNode.setAttribute("value", cloneNode.getAttribute("placeholder")) cloneNode.style.display = "none"
將克隆節點插入到當前節點的后面
item.insertAdjacentHTML("afterend", cloneNode.outerHTML)
對克隆節點綁定focus事件,當克隆節點獲取焦點時,將克隆節點隱藏,并將當前節點顯示出來,并將當前節點獲取焦點
item.nextSibling.addEventListener("focus", function () { this.style.display = "none" this.previousSibling.style.display = "inline" this.previousSibling.focus() })
對當前節點綁定focus事件,當前節點獲取焦點時,將緊跟在當前節點后面的克隆節點隱藏掉
item.addEventListener("focus", function () { this.nextSibling.style.display = "none" })
對當前節點綁定blur事件,當前節點失去焦點時,如果當前節點沒有進行任何輸入,則需要對齊進行placeholder提示,這時就將當前節點隱藏,將緊跟在當前節點后面的克隆節點顯示出來
item.addEventListener("blur", function () { if (!this.value) { this.style.display = "none" this.nextSibling.style.display = "inline" } })
在頁面初始化完成后,判斷當前節點是否有初始輸入值,如果沒有的話,將當前節點隱藏,將緊跟在當前節點后的克隆節點顯示出來
if (!item.value) { item.style.display = "none" item.nextSibling.style.display = "inline" }整體思路圖示 整體代碼
if (!("placeholder" in document.createElement("input"))) { // 將返回的nodeList對象轉為數組 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" } }) }
由于本人學識有限,有很多需要提升的地方,望大家多多指教。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91819.html
摘要:為此決定自研一個富文本編輯器。例如當要轉化的對象有環存在時子節點屬性賦值了父節點的引用,為了關于函數式編程的思考作者李英杰,美團金融前端團隊成員。只有正確使用作用域,才能使用優秀的設計模式,幫助你規避副作用。 JavaScript 專題之惰性函數 JavaScript 專題系列第十五篇,講解惰性函數 需求 我們現在需要寫一個 foo 函數,這個函數返回首次調用時的 Date 對象,注意...
摘要:轉自偽類實現占位符交互效果一規范中占位符交互效果風格占位符交互效果官方示意見此頁面。我們可以采用絕對定位最后,對這個元素在輸入框時候,以及非顯示的時候進行重定位縮小并位移到上方四清除按鈕部分上是必要屬性,配合偽類實現我們的效果。 轉自: https://github.com/yougola/bl... CSS :placeholder-shown偽類實現Material Design占...
摘要:返回的是一個樣式聲明對象,只讀。方法返回一個最初值對象或值列表對象,這取決于屬性值的類型。而且,雖然中,對象支持方法,但總是返回因此,目前來講,方法可以先不聞不問。本文轉載之張鑫旭的博客 一、getComputedStyle是?getComputedStyle是一個可以獲取當前元素所有最終使用的CSS屬性值。返回的是一個CSS樣式聲明對象([object CSSStyleDeclara...
摘要:返回的是一個樣式聲明對象,只讀。方法返回一個最初值對象或值列表對象,這取決于屬性值的類型。而且,雖然中,對象支持方法,但總是返回因此,目前來講,方法可以先不聞不問。本文轉載之張鑫旭的博客 一、getComputedStyle是?getComputedStyle是一個可以獲取當前元素所有最終使用的CSS屬性值。返回的是一個CSS樣式聲明對象([object CSSStyleDeclara...
閱讀 1238·2021-11-24 09:39
閱讀 385·2019-08-30 14:12
閱讀 2596·2019-08-30 13:10
閱讀 2441·2019-08-30 12:44
閱讀 965·2019-08-29 16:31
閱讀 850·2019-08-29 13:10
閱讀 2442·2019-08-27 10:57
閱讀 3157·2019-08-26 13:57