看板 Ajax 關於我們 聯絡資訊
目前寫了一隻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
eight0: 沒寫過 jq plugin,但你大概是要 .call(this, Act) 12/15 14:52
TETZ: js in HTML那裡的話應該是用bind(this) 12/16 04:27
TETZ: 看了你的jsfiddle其實callback可以直接用 12/16 04:37
TETZ: https://jsfiddle.net/518mzf1o/2/ 12/16 04:37
JYHuang: 看來一直被.call這方式誤導了,感謝~ 12/16 12:17