Вот тестовая страница, которую я использую. Эта версия работает нормально, переадресация на #success:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html><head>
<script type="text/javascript" src="prototype.js"></script>
</head><body>
<form id='form' method='POST' action='#fail'>
<button id='button'>Oh my giddy aunt!</button>
<script type="text/javascript">
var fn = function() {
$('form').action = "#success";
$('form').submit();
}
$('button').observe('mousedown', fn);
</script>
</form>
</body></html>
Если я очищаю обработчик:
var fn = function() {
}
Форма отправлена, но, конечно, на этот раз мы отправлены на #fail.
С предупреждением в обработчике:
var fn = function() {
alert("omg!");
}
Форма не отправлена. Это ужасно любопытно.
С event.stop()
, который должен предотвратить использование браузером действия по умолчанию:
var fn = function(event) {
event.stop();
}
Мы отправлены на # fail.
Таким образом, alert()
более эффективно предотвращает отправку, чем event.stop()
. Что дает?
Я использую Firefox 3.6.3 и Prototype 1.6.0.3. Это поведение также появляется в Prototype 1.6.1.