有時會在修改頁面中,檢查頁面的的欄位(text、checkbox、radio、select),沒有沒修改過,如果沒有修改,按下送出,此時是關閉視窗或轉頁,省去post出去,sever檢查與寫資料庫。
這是小弟我自製的jQuery套件,有二種使用方式
1 2 3 4 5 | //這二個方法是同樣的,都是檢查頁面上所有:input,有沒有修改 $.hasChanged(); $( ":input" ).hasChanged(); //也可以自訂Selector $( "#form1 input" ).hasChanged(); |
我是用input的屬性defaultValue、defaultChecked與option的defaultSelected查檢有沒有變更,這幾個值是在下載HTML就決定好的,如果是頁面載入完後用javascript賦值,因為預設值一定都是空的,所以會被認為有修改過。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | /* 程式功能只有一個檢查頁面上的element有沒有修改過,true為有修改過,false為沒有修改過 使用方式有二種 $.hasChanged() 檢查:input有沒有修改過 $(selector).hasChanged() 檢查selector子的元素有沒有修改過 */ ( function ($) { $.hasChanged = function () { return $( ":input" ).hasChanged(); } $.fn.hasChanged = function () { for ( var i = 0; i < this .length; i++) { var input = this [i]; if (input.type == "checkbox" || input.type == "radio" ) { if (checkCheckBoxAndRadio(input)) { return true ; } } else if ( typeof (input.defaultValue) != "undefined" ) { if (chekcInput(input)) { return true ; } } else if (input.type == "select-one" ) { if (checkSelectOne(input)) { return true ; } } else if (input.type == "select-multiple" ) { if (checkSelectMultiple(input)) { return true ; } } else { alert( "不支援" + input.type); return false ; } } return false ; } function checkSelectOne(input) { //下拉選單零筆,不考慮 if (input.options.length == 0) { return false ; } var defaultIndex = 0; for ( var j = 1; j < input.options.length; j++) { var option = input.options[j]; if (option.defaultSelected) { defaultIndex = j; break ; } } return defaultIndex != input.selectedIndex; } function checkSelectMultiple(input) { //下拉選單零筆,不考慮 if (input.options.length == 0) { return false ; } for ( var j = 0; j < input.options.length; j++) { var option = input.options[j]; if (option.defaultSelected != option.selected) { return true ; } } return false } function checkCheckBoxAndRadio(input) { //checkbox與radio,比有沒有Checked return input.checked != input.defaultChecked; } function chekcInput(input) { return input.value != input.defaultValue; } })(jQuery) |
NOTE:
defaultValue是有一次我按下reset的按鈕時,發現所有的值都還原成預設值,而不是空的,我就很好奇的瀏覽器是怎麼記錄這些值的,就不小心讓我發現defaultValue這個屬性,所以如果想局部還原,可以用input.value=input.defaultValue
測試瀏覽器
IE 8 OK
Chrome 6 OK
Firefox 3.5 OK
NOTE:
有一個很像Bug又不是Bug的東西,請在用時,注意一下
12345678<!--明明是下拉選單,卻下多個selected,因為下拉選單是單選,所以最後會選在5上,1-4會被判別被修改-->
<
select
>
<
option
selected>1</
option
>
<
option
selected>2</
option
>
<
option
selected>3</
option
>
<
option
selected>4</
option
>
<
option
selected>5</
option
>
</
select
>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?