1 /** 2 * @fileOverview patch for ie<9 submit : does not bubble ! 3 * @author yiminghe@gmail.com 4 */ 5 KISSY.add("event/submit", function (S, UA, Event, DOM, special) { 6 var mode = S.Env.host.document['documentMode']; 7 if (UA['ie'] && (UA['ie'] < 9 || (mode && mode < 9))) { 8 var getNodeName = DOM.nodeName; 9 special['submit'] = { 10 setup:function () { 11 var el = this; 12 // form use native 13 if (getNodeName(el) == "form") { 14 return false; 15 } 16 // lazy add submit for inside forms 17 // note event order : click/keypress -> submit 18 // keypoint : find the forms 19 Event.on(el, "click keypress", detector); 20 }, 21 tearDown:function () { 22 var el = this; 23 // form use native 24 if (getNodeName(el) == "form") { 25 return false; 26 } 27 Event.remove(el, "click keypress", detector); 28 S.each(DOM.query("form", el), function (form) { 29 if (form.__submit__fix) { 30 form.__submit__fix = 0; 31 Event.remove(form, "submit", { 32 fn:submitBubble, 33 last:1 34 }); 35 } 36 }); 37 } 38 }; 39 40 41 function detector(e) { 42 var t = e.target, 43 nodeName = getNodeName(t), 44 form = (nodeName == "input" || nodeName == "button") ? t.form : null; 45 46 if (form && !form.__submit__fix) { 47 form.__submit__fix = 1; 48 Event.on(form, "submit", { 49 fn:submitBubble, 50 last:1 51 }); 52 } 53 } 54 55 function submitBubble(e) { 56 var form = this; 57 if (form.parentNode && 58 // it is stopped by user callback 59 !e.isPropagationStopped && 60 // it is not fired manually 61 !e._ks_fired) { 62 // simulated bubble for submit 63 // fire from parentNode. if form.on("submit") , this logic is never run! 64 Event.fire(form.parentNode, "submit", e); 65 } 66 } 67 } 68 69 }, { 70 requires:["ua", "./base", "dom", "./special"] 71 }); 72 /** 73 * modified from jq ,fix submit in ie<9 74 * - http://bugs.jquery.com/ticket/11049 75 **/