


Corak reka bentuk JavaScript--Kemahiran input validation_javascript corak strategi
Corak strategi mentakrifkan sekumpulan algoritma dan merangkumnya secara berasingan supaya ia boleh digantikan antara satu sama lain Corak ini menjadikan algoritma berubah bebas daripada pelanggan yang menggunakan pengiraan.
Tentukan dahulu borang input mudah:
<!DOCTYPE html> <html> <head> <meta charset="utf-"> <style> .form{ width: px; height: px; #margin: px auto; } .form-item-label{ width:px; text-align: right; float: left; } .form-item-input{ float: left; } .form-item{ width: % ; height: px; line-height: px; } </style> </head> <body> <div class='form'> <div class="form-item"> <div class='form-item-label'><span>用户名:</span></div> <div class='form-item-input'><input id='userName' name='用户名' type="text"></div> </div> <div class="form-item" > <div class='form-item-label'><span>密码:</span></div> <div class='form-item-input'><input id='password' name='密码' type="text"></div> </div> <div class="form-item" > <div class='form-item-label'><span>确认密码:</span></div> <div class='form-item-input'><input id='repassword' name='密码确认' type="text"></div> </div> <div class="form-item" > <div class='form-item-label'><span>邮箱:</span></div> <div class='form-item-input'><input id='mail' name='邮箱' type="text" ></div> </div> </div> <br> <button id='submit' >提交</button> <script type='text/javascript' src="../reference/jquery-...min.js"></script> </body> </html>
Secara amnya, dalam tindakan penyerahan selepas menyunting maklumat pada halaman, maklumat input perlu disahkan Anda akan melihat bahawa banyak kod yang bertanggungjawab untuk menyemak ditulis dalam fungsi penyerahan atau dalam fungsi semakan bebas.
Sebagai contoh, seperti di bawah.
$(document).ready(function(){ $('#submit').bind('click', doSubmit); }); function doSubmit(){ var eleUserName = document.getElementById('userName'); if(eleUserName.value === '') { alert('用户名不能为空'); return; } if(eleUserName.length < 6) { alert('用户名长度不能少于6个字符'); return; } if(eleUserName.length > 6) { alert('用户名长度不能多于20个字符'); return; } }
Kaedah penulisan ini pasti dapat memenuhi keperluan fungsian, tetapi akan ada beberapa masalah:
1. Jika saya ingin menggunakannya pada halaman lain, saya perlu menyalin kod yang dipanggil semula menjadi penyalinan, dan akan terdapat banyak pertindihan kod. Yang lebih baik akan mengklasifikasikan dan membungkus kod semakan, tetapi akan ada lebih banyak pertindihan.
2. Jika saya ingin menambah pengesahan input, maka saya perlu mengubah suai fungsi penyerahan secara langsung.
3. Jika anda mengubah suai fungsi penyerahan, anda mesti meliputi semua ujian reka bentuk fungsi, kerana anda tidak tahu bila perubahan tersilap atau situasi yang tidak diketahui akan berlaku.
Langkah transformasi:
1. Anggap setiap logik pengesahan sebagai strategi pengesahan dan rangkumkan setiap fungsi strategi pengesahan Parameter fungsi harus konsisten dan boleh menerima elemen DOM, nilai yang disahkan, mesej ralat dan parameter tersuai.
2. Tentukan pengesah, anda boleh mengimport fungsi strategi pengesahan atau menambahnya.
3. Pengesah menyediakan kaedah pengesahan untuk membuat panggilan semasa pengesahan, dan secara dalaman memanggil fungsi strategi pengesahan tertentu.
4. Sahkan panggilan.
Langkah 1.
Pertimbangkan setiap satu jika sebagai peraturan perniagaan pengesahan, layan setiap peraturan perniagaan sebagai fungsi strategi yang berasingan dan rangkumkan semua fungsi strategi menjadi objek strategi.
var validationStrategies = { isNoEmpty: function(element, errMsg, value) { if(value === '') { return this.buildInvalidObj(element, errMsg, value ); } }, minLength: function(element, errMsg, value, length) { if(value.length < length){ return this.buildInvalidObj(element, errMsg, value); } }, maxLength: function(element, errMsg, value, length) { if(value.length > length){ return this.buildInvalidObj(element, errMsg, value); } }, isMail: function(element, errMsg, value, length) { var reg = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/; if(!reg.test(value)){ return this.buildInvalidObj(element, errMsg, value); } } };
Tiga parameter pertama bagi semua fungsi adalah konsisten dan diperlukan, menunjukkan elemen DOM yang disahkan, mesej ralat dan nilai yang disahkan. Yang keempat bermula dengan peraturan pengesahan fungsi itu sendiri untuk menentukan parameter tersuai.
Kaedah "buildInvalidObj" hanya menukar tiga parameter pertama kepada objek ralat dan mengembalikannya objek ralat ini akan dikembalikan selagi pengesahan gagal.
Menurut prinsip penyongsangan kebergantungan, modul peringkat tinggi tidak boleh bergantung pada modul peringkat rendah, jadi ia tidak boleh digunakan secara langsung oleh pemanggil pengesahan.
Pengenkapsulan dan pengabstrakan melalui pengesah.
Langkah 2:
Tentukan pengesah, anda boleh mengimport semua strategi pengesahan ke dalamnya, atau anda boleh menambah fungsi strategi pengesahan secara berasingan.
//输入验证器 function InputValidators(){ this.validators = []; this.strategies = {}; } //从策略对象导入验证策略函数 //参数: // strategies: 包含各种策略函数的对象 InputValidators.prototype.importStrategies = function(strategies) { for(var strategyName in strategies) { this.addValidationStrategy(strategyName, strategies[strategyName]); } }; //添加验证策略函数 //参数: // name: 策略名称 // strategy: 策略函数 InputValidators.prototype.addValidationStrategy = function(name, strategy){ this.strategies[name] = strategy; };
Langkah 3:
Tambah kaedah pengesahan untuk menerima panggilan luar.Peraturan parameter pertama ditetapkan kepada peraturan pengesahan, seperti "minLength:6". Kod berikut akan menjana panggilan ke fungsi strategi tertentu.
":6" menunjukkan parameter yang disesuaikan oleh fungsi strategi mengikut peraturannya sendiri.
//添加验证方法 //参数: // rule: 验证策略字符串 // element: 被验证的dom元素 // errMsg: 验证失败时显示的提示信息 // value: 被验证的值 InputValidators.prototype.addValidator = function(rule, element, errMsg, value) { var that = this; var ruleElements = rule.split(":"); this.validators.push(function() { var strategy = ruleElements.shift(); var params = ruleElements; params.unshift(value); params.unshift(errMsg); params.unshift(element); return that.strategies[strategy].apply(that, params); }); };
//开始验证 InputValidators.prototype.check = function() { for(var i = 0, validator; validator = this.validators[i++];){ var result = validator(); if(result) { return result; } } };
Langkah 4:
Di mana pengesahan diperlukan, mula-mula buat objek pengesah baharu.
var validators = new InputValidators();
validators.importStrategies(validationStrategies); validators.addValidationStrategy('isEqual', function(element, errMsg, value1, value2) { if(value1 !== value2) { return this.buildInvalidObj(element, errMsg, value1 ); } });
var eleUserName = document.getElementById('userName'); validators.addValidator('isNoEmpty', eleUserName, '用户名不能为空', eleUserName.value); validators.addValidator('minLength:6', eleUserName, '用户名的字符个数必须是6到20个', eleUserName.value); validators.addValidator('maxLength:20', eleUserName, '用户名的字符个数必须是6到20个', eleUserName.value); var elePassword = document.getElementById('password'); validators.addValidator('isNoEmpty', elePassword, '密码不能为空', elePassword.value); validators.addValidator('minLength:6', elePassword, '密码的字符个数必须是6到20个', elePassword.value); validators.addValidator('maxLength:20', elePassword, '密码的字符个数必须是6到20个', elePassword.value); var eleRepassword = document.getElementById('repassword'); validators.addValidator('isNoEmpty', eleRepassword, '确认密码不能为空', eleRepassword.value); validators.addValidator('minLength:6', eleRepassword, '确认密码的字符个数必须是6到20个', eleRepassword.value); validators.addValidator('maxLength:20', eleRepassword, '确认密码的字符个数必须是6到20个', eleRepassword.value); validators.addValidator('isEqual:' + elePassword.value, eleRepassword, '两次密码不一致', eleRepassword.value); var eleMail = document.getElementById('mail'); validators.addValidator('isNoEmpty', eleMail, '邮箱不能为空', eleMail.value); validators.addValidator('isMail', eleMail, '邮箱不是一个有效的格式', eleMail.value);
semak mengembalikan objek ralat Kita boleh menggunakan objek ini untuk melaksanakan operasi gesaan secara seragam pada elemen DOM selepas semakan, seperti menetapkan fokus, memilih kandungan atau membalut lapisan gaya merah di luar kotak input.
var result = validators.check(); if(result){ alert(result.errMsg); result.element.focus(); result.element.select(); return false; }
Semua kod:
Di atas adalah keseluruhan kandungan corak reka bentuk javascript yang diperkenalkan oleh editor - pengesahan input corak strategi saya harap anda menyukainya.

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

Perbincangan mendalam mengenai punca-punca utama perbezaan dalam output konsol.log. Artikel ini akan menganalisis perbezaan hasil output fungsi Console.log dalam sekeping kod dan menerangkan sebab -sebab di belakangnya. � ...

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

Pembelajaran JavaScript tidak sukar, tetapi ia mencabar. 1) Memahami konsep asas seperti pembolehubah, jenis data, fungsi, dan sebagainya. 2) Pengaturcaraan asynchronous tuan dan melaksanakannya melalui gelung acara. 3) Gunakan operasi DOM dan berjanji untuk mengendalikan permintaan tak segerak. 4) Elakkan kesilapan biasa dan gunakan teknik debugging. 5) Mengoptimumkan prestasi dan mengikuti amalan terbaik.

Terokai pelaksanaan fungsi seretan panel dan drop panel seperti VSCode di bahagian depan. Dalam pembangunan front-end, bagaimana untuk melaksanakan vscode seperti ...
