【茶包射手日記】jQuery.validate 1.8在IE7相容模式無法運作

測試發現IE9切到IE7相容模式後,jquery.validate.js的驗證功能完全失效,不做任何檢核就送出表單。

追進原始碼,發現問題出在jquery.validate.js (ver 1.8)裡elements()函數的寫法:

elements: function() {
    var validator = this,
        rulesCache = {};
 
    // select all valid inputs inside the form (no submit or reset buttons)
    // workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
    return $([]).add(this.currentForm.elements)
    .filter(":input")

再深入追查,form.elements意指<form>下所有元素的集合,發現在IE7相容模式下,form.elements.length確實等於集合元素的數量沒錯,但$(form.elements).length卻恆等於1,這導致程式找不到<form>裡的輸入欄位,因此不會觸發任何檢核動作。但同樣的程式碼在IE9標準模式、Firefox、Chrome均運作正常,$(form.elements).length就等於form.elements.length,判定此為IE7模式下的專屬案例!

在jsFiddle做了一個即溶茶包,經噗友幫忙驗證此點確為IE9行為,不是我人品有問題(感謝大家相助),但仍禁不住悲從中來,發愁在趕專案還踩到大地雷... 含淚爬文看到有人提及jquery.validate 1.8.1,才警覺專案中沒有用最新版的jquery.validate,檢視1.8.1版的elements()寫法:

elements: function() {
    var validator = this,
        rulesCache = {};
 
    // select all valid inputs inside the form (no submit or reset buttons)
    return $(this.currentForm)
    .find("input, select, textarea")
    .not(":submit, :reset, :image, [disabled]")

看起來jquery.validate 1.8.1版已調整寫法,避開了前述地雷。而在換成1.8.1版後,網頁檢核功能在IE7相容模式下亦可正常執行無誤,有驚無險再過一關!

歡迎推文分享:
Published 01 September 2011 01:22 PM 由 Jeffrey
Filed under: , ,
Views: 11,382



意見

# johny.horper1985@gmail.com said on 01 September, 2011 07:07 AM

Thanks mat for this wonderful information about bags shooter compatibility  mode that does not work in IE7.

Thanks.

# Chan said on 03 September, 2011 11:45 AM

所以我每次要弄新 project 時都確保每隻 plugin 都是最新版 XD

# johny.horper1985@gmail.com said on 10 September, 2011 03:24 AM

Nice blog..  Thank you for sharing this informative content.I hope to see more content like this.Keep on posting!

Great job! Keep it up.

Thanks.

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<September 2011>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication