Click Me
Click Me 2
Click Me 3
{"ScriptPreparationCode":"element = document.getElementById(\u0022clickme\u0022);\r\ninnerel = document.getElementById(\u0022innerel\u0022);\r\ninnerel2 = document.getElementById(\u0022innerel2\u0022);\r\ninnerel3 = document.getElementById(\u0022jel\u0022);\r\njelem = $(\u0022#clickme\u0022);\r\njel = $(\u0022#jel\u0022);\r\n\r\nuidc = 0;\r\nfunction getUid (el) {\r\n\tvar id = el.id;\r\n\tif(!id) {\r\n \tid = \u0022uid_\u0022\u002B (\u002B\u002Buidc);\r\n \tel.id = id;\r\n }\r\n\treturn id;\r\n}\r\nvar ev = {\r\n\tones: {},\r\n\tcheckTarget: function (eventSelector, target, selectortype) {\r\n // we want to know if target matches eventSelector, if not then\r\n // if target is child of eventSelector\r\n // selectortype =\u003E id no #, class no dot/no space, special\r\n\r\n var selectorEl,\r\n targetId = getUid (target);\r\n if(selectortype == \u0022id\u0022) {\r\n if(eventSelector == targetId) {\r\n return true;\r\n } else {\r\n var eventEl = document.getElementById(eventSelector);\r\n //This check if target is eventEl or if is its child\r\n if (eventEl.contains(target)) return true;\r\n }\r\n } else if(selectortype == \u0022class\u0022) {\r\n //check if target parents contains class or queryselector\r\n if(target.classList.contains(eventSelector)) {\r\n return true;\r\n } else {\r\n if(document.querySelector(\u0022.\u0022\u002BeventSelector\u002B\u0022 #\u0022\u002BtargetId)) {\r\n return true;\r\n }\r\n }\r\n } else {\r\n if(document.querySelector(eventSelector\u002B\u0022 #\u0022\u002BtargetId)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n on: function (type, el, cb, once, eventEl, stop) {\r\n var capture = eventEl?true:false;\r\n if(!ev.ones[type]) ev.ones[type] = {};\r\n if(!ev.ones[type][el.id]) {\r\n\t\t\tev.ones[type][el.id] = ev.eventHandler.bind(null, cb, eventEl, once, stop, capture);\r\n el.addEventListener(type, ev.ones[type][el.id], capture);\r\n }\r\n },\r\n eventHandler: function (cb, eventEl, once, stop, capture, e) {\r\n \t//console.log(e);\r\n \tif(once) {\r\n \te.currentTarget.removeEventListener(e.type, ev.ones[e.type][e.currentTarget.id], capture);\r\n ev.ones[e.type][e.currentTarget.id] = false;\r\n }\r\n if(capture) {\r\n if (ev.checkTarget(eventEl.id, e.target, \u0022id\u0022)) {\r\n if(stop) e.stopImmediatePropagation();\r\n cb();\r\n } else {\r\n console.log(\u0022check not target 1\u0022, e.target.id);\r\n }\r\n } else {\r\n if(stop) e.stopImmediatePropagation();\r\n cb();\r\n }\r\n },\r\n on2: function (type, el, cb, once, eventEl, stop) {\r\n \tif(!ev.ones[type]) ev.ones[type] = {};\r\n var capture = eventEl?true:false;\r\n var eventHandler = function (e) {\r\n \tif(once) {\r\n \te.currentTarget.removeEventListener(e.type, ev.ones[type][el.id], capture);\r\n \tev.ones[type][el.id] = false;\r\n }\r\n if(eventEl) {\r\n if (ev.checkTarget(eventEl.id, e.target, \u0022id\u0022)) {\r\n if(stop) e.stopImmediatePropagation();\r\n cb();\r\n } else {\r\n console.log(\u0022check not target 2\u0022, e.target.id);\r\n }\r\n } else {\r\n if(stop) e.stopImmediatePropagation();\r\n cb();\r\n }\r\n }\r\n\t\t//\r\n if(!ev.ones[type][el.id]) {\r\n \tev.ones[type][el.id] = eventHandler;\r\n el.addEventListener(type, ev.ones[type][el.id], capture);\r\n }\r\n }\r\n}\r\n\r\n//\r\n\r\n\r\nfunction cb1 (param) {\r\n\tconsole.log(param);\r\n}\r\nfunction cb2 (param, e) {\r\n console.log(param, e.target);\r\n}\r\nfunction cb3 (param, e) {\r\n\tconsole.log(param);\r\n}\r\nvar cbvar1 = cb1.bind(null, \u0022bala 1\u0022);\r\nvar cbvar2 = cb2.bind(null, \u0022bala 2\u0022);\r\nvar cbvar3 = cb3.bind(null, \u0022bala 3\u0022);\r\nvar event = new Event(\u0022click\u0022); ","TestCases":[{"Name":"object function","Code":"ev.on (\u0022click\u0022, element, cbvar1, false, innerel, false);","IsDeferred":false},{"Name":"nested function","Code":"ev.on2 (\u0022click\u0022, element, cbvar1, false, innerel, false);","IsDeferred":false},{"Name":"jqeury","Code":"jelem.on(\u0022click\u0022, \u0022#innerel\u0022, cbvar1);","IsDeferred":false},{"Name":"object function inner elem","Code":"ev.on (\u0022click\u0022, element, cbvar3, false, innerel3, false);","IsDeferred":false}]}