作者JYHuang (夏天到了,冷不起来了说)
看板Ajax
标题[问题] 在callback里使用自身的method
时间Thu Dec 15 13:41:04 2016
目前写了一只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呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.143.49.26
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1481780467.A.152.html
※ 编辑: JYHuang (220.143.49.26), 12/15/2016 14:41:04
1F:推 eight0: 没写过 jq plugin,但你大概是要 .call(this, Act) 12/15 14:52
2F:推 TETZ: js in HTML那里的话应该是用bind(this) 12/16 04:27
3F:→ TETZ: 看了你的jsfiddle其实callback可以直接用 12/16 04:37
5F:→ JYHuang: 看来一直被.call这方式误导了,感谢~ 12/16 12:17