[问题] 在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