Ticket #11049 (closed bug: fixed)
submit can not be stopped in ie when bubbling
| Reported by: | yiminghe | Owned by: | dmethvin |
|---|---|---|---|
| Priority: | high | Milestone: | None |
| Component: | event | Version: | 1.7.1 |
| Keywords: | Cc: | ||
| Blocking: | Blocked by: |
Description
- input the following html:
<html>
<head>
</head>
<body>
<div id='t'>
<form id='f'>
<input type='submit' id='s'/>
</form>
</div>
<script src='jquery-1.7.1.js'></script>
<script>
$(function(){
var ret=[];
$("#t").on("submit",function(e){
e.preventDefault();
e.stopPropagation();
});
// trigger jquery's submit hack
$('#s')[0].click();
setTimeout(function(){
$("#t").on("submit",function(e){
ret.push(1);
e.preventDefault();
e.stopPropagation();
});
$("#f").on("submit",function(e){
e.preventDefault();
e.stopPropagation();
});
$('#s')[0].click();
setTimeout(function(){
alert(ret.length==0);
},100);
},100);
});
</script>
</body>
</html>
- run it in ie
expected : alert(true)
actual result : alert(false)
PS : Maybe event "change" in ie has the same problem,i will check it later. PS2 : I try to fix this bug in KISSY (which learned a lot from jquery),hope it is feasible for jquery too.
- place event "submit" fix hander as the last handler always :
- do nothing in submit fix handler if user called stopPropagation in his handler:
After above fixes the result is fine :
http://docs.kissyui.com/kissy/src/event/tests/submit-bubble/jq_bug_fix.html
Change History
comment:2 Changed 17 months ago by dmethvin
- Owner set to dmethvin
- Status changed from new to assigned
Yep, I agree about the bug. Making sure the event runs last will be tricky though, given that other code can attach events later.
comment:3 Changed 17 months ago by yiminghe
yes, it is tricky, especially making sure the submit fix event runs last always even user attach event later , so it need to modify "event add" , and record lastCount ,always place user's event handler before submit fix :
The above steps fix this bug perfectly, hope you can find a better way
comment:4 Changed 17 months ago by dmethvin
- Priority changed from undecided to high
- Component changed from unfiled to event
comment:5 Changed 15 months ago by Dave Methvin
- Status changed from assigned to closed
- Resolution set to fixed
Fix #11049. Let bubbling submit be cancellable in oldIE.
Changeset: 92a92be10f2c6eecc93e0def9001a2ef2852fde1
comment:6 Changed 15 months ago by yiminghe
@Dave Methvin
Still not perfect :) , open in ie : http://jsfiddle.net/yiminghe/v9Zsq/
But i think the current solution is fine in real world.
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

sorry , open in ie and other browsers : http://jsfiddle.net/yiminghe/hFBng/