我正在使用無處不在jquery validate plugin進行表單驗證。它支持使用metadata plugin來添加驗證規則以形成元素。主要煩惱與jQuery元數據插件和jQuery驗證插件
我正在使用此功能。當驗證查找這些規則它使這個元素的電話:
$(element).metadata()[meta]
其中meta
是存儲這些規則的前綴。例如
<input data-validate="{maxLength: 12}" name='foo'/>
元的值將被設置爲'validate'來獲取這些屬性。但這裏有一個主要問題!
這裏是元數據插件不解析數據屬性爲JSON什麼:
var getObject = function(data) {
if(typeof data != "string") return data;
data = eval("(" + data + ")"); //oh no!!!!!
return data;
}
if (settings.type == "html5") {
var object = {};
$(elem.attributes).each(function() {
var name = this.nodeName;
if(name.match(/^data-/)) name = name.replace(/^data-/, '');
else return true;
object[name] = getObject(this.nodeValue);
});
}
那麼最終發生的是,元數據解析所有data-*
屬性,並試圖EVAL內容!只要你包含一個不包含json的數據屬性,就會破壞這些東西。
現在的問題:
這似乎是元數據和驗證都是「嘗試和真正的」插件。這是使用人們剛剛生活的元數據插件的已知副作用嗎?
我通常不喜歡修改插件代碼適合我的項目需要,但這個好像我應該:
- 解決元數據插件不能盲目EVAL的東西,而不是使用eval或
- 修復驗證插件使用
.data()
代替元數據插件
此外,有沒有一些其他的方式解決此其他然後修改元數據插件
帖子賞金編輯: 我應該說得更清楚一點,我會對如何發生這種情況的一些討論感興趣。在規範驗證插件和插件之間如何存在如此巨大的錯誤,這些插件在resig編寫的任何地方都可以使用。
一個修復很簡單,我已經應用它(我選擇修改驗證插件使用$ .data當'meta'被定義時) - 我給這裏150點的想法是爲什麼這仍然是一個問題(也許它不是!)
當然,這是一種很奇怪的事情,因爲表單在HTML5中有驗證。我一直在支持它的瀏覽器中使用本地驗證,然後使用JS來填充舊版本的行爲。 –