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  **/