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

看板Ajax作者 (夏天到了,冷不起來了說)時間8年前 (2016/12/15 13:41), 8年前編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/1
目前寫了一隻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://www.ptt.cc/bbs/Ajax/M.1481780467.A.152.html ※ 編輯: JYHuang (220.143.49.26), 12/15/2016 14:41:04

12/15 14:52, , 1F
沒寫過 jq plugin,但你大概是要 .call(this, Act)
12/15 14:52, 1F

12/16 04:27, , 2F
js in HTML那裡的話應該是用bind(this)
12/16 04:27, 2F

12/16 04:37, , 3F
看了你的jsfiddle其實callback可以直接用
12/16 04:37, 3F

12/16 04:37, , 4F

12/16 12:17, , 5F
看來一直被.call這方式誤導了,感謝~
12/16 12:17, 5F
文章代碼(AID): #1OKYpp5I (Ajax)
文章代碼(AID): #1OKYpp5I (Ajax)