el-mement表單校驗-校驗失敗時自動聚焦到失敗的input框


 

思路:調用input的focus()事件,聚焦到失敗的input框上,

問題:如何獲取失敗的input框,結合element的校驗方法,查看可以提供入口的地方

 

調用this.$refs[formName].validate()時的具體操作:

 

 field信息:

 內部‘field’信息:

 驗證失敗的返回值invalidFields信息:

 

問題:如何根據校驗失敗的field定位到相應的input框?

返回的校驗失敗的對象信息,只包含了prop的名字和失敗的提示信息,根據這兩項無法獲取到對應的input框(ps:此時不知道如何利用返回的invalidFields的信息跟組件進行綁定)

 

 第一次嘗試

仿照form.validate()方法重寫一個驗證,獲取所有的fields,同樣是循環遍歷調用field.validate()方法,在某個field驗證失敗時,自動聚焦到此input框上

 此時的field是el-form-item組件,只有一個child就是el-input,可以看到此child下包含focus方法

 

 弊端:field.$children[0]太過於局限,當此el-form-item中包含其他的組件時,索引為0的不一定是input框,如:

 

此時,field.$children[0]是一個el-button組件,此組件沒有focus方法,會導致報錯

 

最終解決辦法

在之前的debug過程中可以看到element-ui自帶的表單驗證返回中包含一個invalidFields對象,此對象包含了驗證失敗的所有屬性名,如下圖所示:

 

通過遍歷invalidFields的屬性(ps:之后才知道for可以遍歷一個對象的所有屬性),在對應的input框上添加ref屬性,直接根據ref就可精確地獲取到元素

 

 

注意:input的readonly和disabled屬性

disabled和readonly:
共同點:

都設為true,則form屬性將不能被編輯;

不同點:

disabled=true時,該表單項不能獲取焦點,表單提交時此項不會提交;

readonly只針對input(text / password)和textarea表單項有效,設置為true時,依然可以獲取焦點,提交時此項也會提交;

 

參考鏈接:

https://blog.csdn.net/m0_37972557/article/details/81357607

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM