2017-05-31 40 views
0

更通用的我有大量的這種類型的腳本的:使腳本用於表單驗證

// xx is the module name and will be different 
$('[data-target="xx"]').validate({ 
    ignore: '', 
    rules: { 
     ORI_Text: { 
      required: true 
     } 
    }, 
    submitHandler: function(form) { 
     var formData = new FormData(form); 
     saveFormDatas(form); 
     return false; 
    } 
}); 

我怎樣才能讓submitHandler部分一般爲我所有的驗證腳本,因爲它是一樣的嗎?

謝謝。

回答

0

您可以簡單地創建一個函數,因爲您擁有的代碼不依賴於任何外部狀態,只能根據給定的參數進行操作。

// this is now abstracted and you can pass it as the callback to many validations. 
function onSubmit(form) { 
    var $input = $(this) // if you need a reference to the validated element 
    var formData = new FormData(form); 
    saveFormDatas(form); 
    return false; 
} 
$('[data-target="xx"]').validate({ 
    ignore: '', 
    rules: { 
     ORI_Text: { 
      required: true 
     } 
    }, 
    submitHandler: onSubmit // the function is passed by reference 
}); 
+0

非常感謝。有用。兩個問題給你。爲什麼'onSubmit'不是'onSubmit()'?第二個是'var input = $(this)',我得到了什麼?謝謝。 –

+0

您正在將該函數的引用作爲回調函數傳遞。 JavaScript通過引用傳遞所有對象和數組以節省內存,所以你可以重新使用你的'onSubmit'函數。如果你有了括號,你會叫它。 'onSubmit()'不會將函數傳遞給'validate'回調函數。 'onSubmit'函數中的'this'將被設置爲您正在驗證的HTMLFormElement'[[data-target =「xx」]「」。以防您需要從已驗證的元素獲取信息,或者想要查找與其相關的其他元素,例如。用於通知或錯誤消息。 – synthet1c

+0

它被包裝成一個jQuery對象,方便'$(this)'。你可以做一些類似'$ input.css({background:'red'})' – synthet1c

0

你可以使用原型(也許):

var someproto={ 
ignore: "", 
rules: { 
    ORI_Text: { 
     required: true 
    } 
}, 
submitHandler: function(form) { 
    var formData = new FormData(form); 
    saveFormDatas(form); 
    return false; 
} 
} 

function some(rules){ 
    return Object.assign(Object.create(someproto),rules); 
} 

可用這樣的:

$('[data-target="xx"]').validate(some({ignore:"a"})); 

一些到的jQuery使得它更容易使用:

jQuery.fn.some=function(rules){ 
this.validate(some(rules)); 
}; 

適用如下:

$('[data-target="xx"]').some({ignore:"a"}); 
+0

我怎樣才能改變字段來驗證? –

+0

@ catatari:什麼?我沒有明白你的觀點 –

+0

規則部分應該並且需要爲每個重複腳本改變。它只是修復了'submitHandler'。 –