На одном жутко полезном по содержанию фотофоруме провели реконструкцию, после которой перестали отправляться сообщения из SeaMonkey. В IE, как не трудно догадаться, проблем нет. Опять же, как не трудно догадаться, владелец считает, что это проблемы Симки.

Посмотрите, пожалуйста, кто рубит в скриптах, - что посоветовать исправить владельцу (в скрипте))).
Вот, выцарапал примерно часть кода с формой:

Выделить код

Код:

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script>
function doAddMessage() {
	frm = document.forms['form3'];
	frm['ms_action'].value = "addnewmessage";
	frm.submit();
}
</script>
<title>t</title></head><body>

<form name="form3" method="post" action=""> 
<input name="ms_action" value="" type="hidden">

<table bgcolor="#000000" border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td>
<table border="0" cellpadding="3" cellspacing="1" width="100%">
<tr bgcolor="#999999">
<td align="center">Новое сообщение</td></tr>
<tr bgcolor="#efefef">

<td align="center" valign="top">&nbsp; <input name="tAutor" size="64" value="" maxlength="20" type="text"><br>
Название сообщения:&nbsp;&nbsp;<input name="tMessagehed" size="64" maxlength="150" value="" type="text">
<p>&nbsp;<textarea name="tMessagetext" cols="60" rows="10"></textarea></p>
<p><input name="tsentM" value="1" checked="checked" type="checkbox"> получать извещения на e-mail о сообщениях по этой теме</p>

<button class="submit" name="Button" onclick="this.disabled=true;doAddMessage()">Отправить</button>&nbsp;

</td></tr>
</table>
</td></tr></table>
</form>
</body>
</html>
Выделить код

Код:

<script>
function doAddMessage() {
    frm = document.forms['form3'];
    frm['ms_action'].value = "addnewmessage";
    frm.submit();
}
</script>
Выделить код

Код:

<form name="form3" method="post" action="">

я может чего-то не понимаю, может кто-то просвятит, но после выполнения frm.submit(); должно выполняться action="". А его нет никакого. Как эта конструкция вообще может работать, или какой-то части кода не хватает, можно ссылочку?

Yan
Под ИЕ пробовал проверять? А то щас под Mozilla у них будет работать, а под ИЕ нет - будет смешно %)

Lynxx
Гм. Еще не проснулся. Спасибо.  :) Пост удаляю.

Там и ИЕ и Опера сейчас работает.
Скопипастил вроде всё.
Тема по этому поводу:
_http://www.mformat.com/forumcollr.asp?mf=2&mr=10&mt=7627
Только не надо там ругаться, ребята поддерживают суперский по содержанию форум, не хотелось бы им портить настроение, даже если что-то у них со скриптами не получается.))

Подправил:

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script>
function doAddMessage() {
    frm = document.forms['form3'];
    frm['ms_action'].value = "addnewmessage";
    frm.submit();
}
</script>
<title>t</title></head><body>

<form name="form3" method="post" action="">
<input name="ms_action" value="" type="hidden">

<table bgcolor="#000000" border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td>
<table border="0" cellpadding="3" cellspacing="1" width="100%">
<tr bgcolor="#999999">
<td align="center">Новое сообщение</td></tr>
<tr bgcolor="#efefef">

<td align="center" valign="top">&nbsp; <input name="tAutor" size="64" value="" maxlength="20" type="text"><br>
Название сообщения:&nbsp;&nbsp;<input name="tMessagehed" size="64" maxlength="150" value="" type="text">
<p>&nbsp;<textarea name="tMessagetext" cols="60" rows="10"></textarea></p>
<p><input name="tsentM" value="1" checked="checked" type="checkbox"> получать извещения на e-mail о сообщениях по этой теме</p>

<button class="submit" name="Button" onclick="this.disabled=true;doAddMessage()">Отправить</button>&nbsp;
<input class="submit" name="Button" type="button" onclick="this.disabled=true;doAddMessage()" value="Отправить">

</td></tr>
</table>
</td></tr></table>
</form>
</body>
</html>

Только почему изначально не работало - не знаю.
RcT
При пустом action берется адрес текущей страницы.

Yan
Я ж всего лишь спросил, зачем так сразу пугаться? %)
В первый раз ты кажется написал

<input type=submit>

а во второй раз

<input type=button>

Больше разницы я не заметил %)
Чем эти 2 типа отличаются? А то я уже не помню ;)

Lynxx
Ну а я всего лишь проверил, и испугался. :)

Lynxx
В первый раз было <input type=submit> и обработка onsubmit формы. Но я не учел, что в IE onsubmit "перебивалось" onclick="this.disabled=true;" у input'а.
Во второй раз по сравнению  исходным примером я просто заменил button на input, и всё почему-то заработало.

vladmir
В общем, предлагай дизайнерам решение Yan'а. Ток надо еще и под Оперой будет им проверить %)
Yan
Т.е. надо узнать разницу между <button> и <input> (насколько я помню, <button> так сказать, поглобальнее?) и между type=submit и type=button (а вот тут труднее %)). И тогда, возможно, мы поймем, почему там работает, а там - нет %)

Элемент BUTTON создает кнопку формы. Он может содержать любые текстовые элементы, кроме A, BUTTON, IFRAME, INPUT, LABEL, SELECT и TEXTAREA, и любые блочные элементы, кроме FORM и FIELDSET. Он может содержаться в любых текстовых и блочных элементах, кроме BUTTON.

Кнопки, созданные этим элементом, подобны кнопкам, созданным элементом INPUT, но они могут иметь содержимое.
Атрибут type  задает тип кнопки:

submit
    Кнопка пересылки формы (принято по умолчанию).
reset
    Кнопка сброса формы.
button
    Кнопка общего вида.

Существуют три типа кнопок:

    * кнопки пересылки формы: при нажатии пересылают форму для обработки серверу;
    * кнопки сброса формы: при нажатии инициализируют форму, сбрасывая значения всех ее элементов в начальные;
    * кнопки общего вида: при нажатии на такую кнопку происходит вызов связанного с этим событием сценария.

На самом деле в исходном примере достаточно было указать у button type="button":

<button type="button" class="submit" ...

Lynxx

Ток надо еще и под Оперой будет им проверить

Боюсь именно "им проверить" - может не сработать.) Надо бы что-то наверняковое забацать.

Ещё я не сохранял форму до изменений. Тогда же отправлялось изо всех браузеров, но как-то очень странно доходило - после отправки выдавалась не обновлённая стр с новым постом, а страница ошибок. Ты думал, что сообщение не отправилось, возвращался, отправлял ещё, а потом ещё и оказывалось, что все посты добавились. Мне кажется, что проблема была не в форме самой по себе, а где-то на стороне сервера, там исправили, а по ходу дела пострадала форма.

Напишу о варианте заменить

<button class="submit" name="Button" onclick="this.disabled=true;doAddMessage()">Отправить</button>

на
<button type="button" class="submit" name="Button" onclick="this.disabled=true;doAddMessage()">Отправить</button>

А как можно проверить работоспособность? Это ведь сервер нужен? То есть советуем теоритически?

vladmir
Работоспособность я проверял заполнив action="http://ya.ru". IE6, Firefox, Opera9 отработали нормально. Да и на пустом action тоже заметно, что страница перезагружается.

Проблема была в том, что в исходном варианте при нажатии на button вызывалась ненужная отправка формы, которая потом прерывалась с помощью onclick, и потом, уже из скрипта, форма повторно не отправлялась.

Когда же мы добавляем type="button", то button уже не вызывает отправку при нажатии, а отрабатывает только onclick.

Короче говоря, и по теории, и исходя их практики, всё должно работать нормально.

P.S. Я почитал, что они хотели этими изменениями как-то от спамеров бороться. Слабенькая я скажу защита... Можно даже сказать, совсем не защита..

Когда же мы добавляем type="button", то button уже не вызывает отправку при нажатии, а отрабатывает только onclick.

Может проще класс submit убрать?

Yan
Спасибо за просветработу, сохраню темку себе, может сгодится тоже.

Поскольку на том конце есть и другая работа и нет желания вдаваться в детали, то, думаю, последует некая пауза а там видно будет. Вариант я передал, может пригодится.
ViRUS

Может проще класс submit убрать?

Но если коллективный разум сгенерирует ещё чего-нибудь, то хуже не будет :)

ViRUS

Может проще класс submit убрать?

class="submit" отвечает за стилевое формление элемента. Он не влияет на type, который по умолчанию равен submit.

Yan

Уже зафурычило, спасибо, помогло! :)

class="submit" отвечает за стилевое формление элемента. Он не влияет на type, который по умолчанию равен submit.

Спасибо, что просвятил!