--- public/javascripts/rails.js.orig 2010-03-12 12:05:01.000000000 +0100 +++ public/javascripts/rails.js 2010-03-12 12:11:11.000000000 +0100 @@ -59,49 +59,78 @@ } $(document.body).observe("click", function(event) { - var message = event.findElement().readAttribute('data-confirm'); + var element = event.findElement('a'); + var message = element.readAttribute('data-confirm'); if (message && !confirm(message)) { event.stop(); return false; } - var element = event.findElement("a[data-remote]"); - if (element) { + if (element.readAttribute('data-remote')) { handleRemote(element); event.stop(); return true; } - var element = event.findElement("a[data-method]"); - if (element) { + if (element.readAttribute('data-method')) { handleMethod(element); event.stop(); return true; } }); - // TODO: I don't think submit bubbles in IE - $(document.body).observe("submit", function(event) { - var element = event.findElement(), - message = element.readAttribute('data-confirm'); - if (message && !confirm(message)) { - event.stop(); - return false; - } - - var inputs = element.select("input[type=submit][data-disable-with]"); - inputs.each(function(input) { - input.disabled = true; - input.writeAttribute('data-original-value', input.value); - input.value = input.readAttribute('data-disable-with'); + if(Prototype.Browser.IE) { + $(document.body).observe("click", function(event) { + var element = event.findElement(); + if(element.readAttribute('type') != 'submit') { + return true; + } + + element = element.up('form'); + if(element) { + if(!element.readAttribute('data-remote')) { + return true; + } + + var message = element.readAttribute('data-confirm'); + if (message && !confirm(message)) { + event.stop(); + return false; + } + + var inputs = element.select("input[type=submit][data-disable-with]"); + inputs.each(function(input) { + input.disabled = true; + input.writeAttribute('data-original-value', input.value); + input.value = input.readAttribute('data-disable-with'); + }); + + handleRemote(element); + event.stop(); + } }); - - var element = event.findElement("form[data-remote]"); - if (element) { - handleRemote(element); - event.stop(); - } - }); + } else { + $(document.body).observe("submit", function(event) { + var element = event.findElement('form'); + var message = element.readAttribute('data-confirm'); + if (message && !confirm(message)) { + event.stop(); + return false; + } + + var inputs = element.select("input[type=submit][data-disable-with]"); + inputs.each(function(input) { + input.disabled = true; + input.writeAttribute('data-original-value', input.value); + input.value = input.readAttribute('data-disable-with'); + }); + + if (element.readAttribute("data-remote")) { + handleRemote(element); + event.stop(); + } + }); + } $(document.body).observe("ajax:after", function(event) { var element = event.findElement();