[問題] 在callback裡使用自身的method

作者: JYHuang (夏天到了,冷不起來了說)   2016-12-15 13:41:04
目前寫了一隻plug要做表單驗證,
讓所有的表單都照這個方式來檢查和輸出訊息
不過總是會有一些比較特殊的規則需要自定規則
所以我想用callback的方式去執行
sample:
https://jsfiddle.net/JYHuang/q6oxk46j/1/
(function($){
$.fn.validation = function(options) {
// 參數
var $option = $.extend({
Valid : true,
CheckList : [],
callback1 : null,
}, options);
var Act = {
// 把不符合的欄位加入訊息清單
add_Message : function(message, name){
$option.CheckList.push({
message: message,
element: $(this).find('[name='+name+']'),
})
},
// 顯示錯誤訊息
show_Message : function() {
if ($option.CheckList.length == 0 )
return true;
// show message
$option.CheckList = [];
},
};
$(this).on('submit',function(){
if (typeof $option.callback1 == 'function') {
$option.extValid.call(Act);
}
// 規則性的驗證
if (!$option.Valid){
Act.show_Message();
return false;
}
})
}
})(jQuery);
======= js in HTML ======
$("#form").Fvalidation({
callback1 : function(Act){
if( false ){
Act.push('不符合規則','FieldName');
},
.....略.....
});
可是HTML這邊的js執行起來,Act這個一直是undefined
可能是我對scope的東西了解不夠深。
請問要如何在callback裡,使用plugin本身的method呢?
作者: eight0 (欸XD)   2016-12-15 14:52:00
沒寫過 jq plugin,但你大概是要 .call(this, Act)
作者: TETZ (你今天宅了嗎?)   2016-12-16 04:27:00
js in HTML那裡的話應該是用bind(this)看了你的jsfiddle其實callback可以直接用https://jsfiddle.net/518mzf1o/2/
作者: JYHuang (夏天到了,冷不起來了說)   2016-12-16 12:17:00
看來一直被.call這方式誤導了,感謝~

Links booklink

Contact Us: admin [ a t ] ucptt.com