1 форма + 2 кнопки + разные action для них.

Привет, всем =) Я бился над проблемой 3 дня и наконец оно заработало так как я задумал.

Задача: Надо чтобы каждая кнопка имела свой action обработчик. Первая кнопка - “предварительный просмотр”, при нажатии на нее данные с формы должны передаваться в cgi-сценарий, который с определенными параметрами, генерировал эту самую форму. Вторая кнопка - обычный submit.

У меня есть форма отправки поста:

<form method="post" action="./bin/add_new_post.cgi">
<input type="text" size="75%" class="text-widget" name="post_title" value="<TMPL_VAR "POST_TITLE">">
<div id="textDiv" style="width:100%;height:200px;position:relative;">
<textarea id="textBox" name="content" class="textarea"><TMPL_VAR "ORIGINAL_POST_CONTENT"></textarea>
<div id="handleBottom" style="width:100%; height:5px; background-color:#C0C0C0; 
    position:absolute; top:195px; cursor:s-resize;"></div>
</div>    
<button class="button" onclick="preview(this.form);">Предварительный просмотр</button>
 
<input type="submit" class="button" value="Добавить пост">
</form>

Javascript функция preview, выполняемая при нажатии на 1 кнопку

<script language="javascript">
function preview(oForm)
{
  var oNewForm = oForm;
  var oNewField = document.createElement('INPUT');
  oNewField.type = 'post';
  oNewField.name = 'add';
  oNewField.value = 'post';
  oNewForm.appendChild(oNewField); 
  oNewForm.action='index.cgi?add=post';
  oNewForm.submit();
}
</script>

oNewField.name = ‘add’ - это имя параметра oNewField.value = ‘post’ - его значение.

oNewForm.action=’index.cgi?add=post’ если так передать праметры в сроке, то при выполнении функции они не будут восприняты скриптом (но в заголовке они будут присутствовать). Я их оставил для красоты..

Можно использовать hidden значение и передавать в подпрограмму флаг (это может быть полезным если надо пределить какая кнопка была нажата):

...
var oNewField = document.createElement('INPUT');
oNewField.type = 'hidden';
oNewField.name = 'flag';
oNewField.value = true;
oNewForm.appendChild(oNewField); 
...

Ну вот и все, что я хотел рассказать сегодня..

PS: Пользуясь случаем передаю привет всем добрым людям, которые помагали мне =)

Кажется в свое

Кажется в свое время решал подобную задачу при помощи разных значений в свойстве value кнопок submit:

<input type="submit" value="preview">
<input type="submit" value="add">

гм. а куда идет

гм. а куда идет value у submit?
Скажи плиз, а то я незнал, незнал и вдруг забыл =)

Quote: разных

Quote:

разных значений в свойстве value кнопок submit:

Если я правильно понял то обработчик все равно будет один.

------------------

#!/usr/bin/perl
print("goto rulez!!!!!!1");

Ой, забыл name прописать:

korshak написал
гм. а куда идет value у submit? Скажи плиз, а то я незнал, незнал и вдруг забыл =)

Ой, забыл name прописать:

            <input type="submit" name="submit" value="preview">
<input type="submit" name="submit" value="add">

И в submit будет либо preview, либо add.

Да, один :-).

fu7ur3 написал
Quote:

разных значений в свойстве value кнопок submit:

Если я правильно понял то обработчик все равно будет один.

------------------

#!/usr/bin/perl
print("goto rulez!!!!!!1");

Да, один :-). Поэтому и уточнил: "решал подобную задачу".
Кстати, зачем для предварительного просмотра и непосредственно отправки разные обработчики,
ведь у этих действий много общего?

Можно и один,

Можно и один, просто мне так удобнее :)

------------------

#!/usr/bin/perl
print("goto rulez!!!!!!1");