2010-09-28 2 views
1

У меня есть 2 кнопки в формате HTML. И оба они должны представить форму. Мне нужно было бы зафиксировать, какая кнопка была нажата, поэтому я могу использовать ее для выполнения различных действий, на основе которых была нажата кнопка., представляющая форму с двумя кнопками

Я могу отправить форму обеими кнопками, но как бы я зафиксировал, какая кнопка была нажата в файле php.

<INPUT type="button" name="submit" class="button" class="element_2" value="firstbutton"> 
<INPUT type="button" name="submit1" class="button" class="element_2" value="second button.. "> 

Я использую почтовый метод в JQuery для отправки формы. Как я могу проверить, какая кнопка HTML была нажата в стороне сервера PHP скрипт

+0

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

ответ

2

Вы могли бы используйте скрытый элемент здесь, примерно следующее:

<input type="hidden" id="submittedBy" name="submittedBy"> 

Ваш текущий .submit() обработчик с помощью .serialize() и $.post() должен работать, просто обновить скрытое поле при нажатии любой кнопки, например:

$("form :submit").click(function() { 
    $("#submittedBy").val(this.name); 
}); 

Тогда в PHP просто проверить, что $_POST["submittedBy"] == "submit" или "submit1", чтобы увидеть, который ее вызвал.


Альтернатива иметь click POST обработчика и добавить в значении между .serializeArray() и когда $.param() называется, например:

$("form :submit").click(function() { 
    var data = $(this.form).serializeArray(); 
    data.push({ name: 'submittedBy', value: this.name }); 
    $.post("myPage.php", data, function(result) { 
    //do something 
    }); 
    return false; //prevent normal form submission, even with the .submit() handler 
}); 
1

Вы можете попробовать использовать функцию IsSet

if(isset($_POST['submit'])){ 
echo "first button was clicked"; 
} 

Или обнаружить второй была нажата:

if(isset($_POST['submit1'])){ 
echo "second button.. was clicked"; 
} 
+0

См. Комментарий @Nick о моем удаленном ответе о том, почему это неправильно. –

+1

@ Darin - 53 rep;) Я воспроизведу здесь. –

+2

Неправильно, он использует метод post в jQuery, даже если используется '.serialize()', он явно указывает, что этого не происходит: «Примечание: в строку помещаются только« успешные элементы управления ». значение кнопки сериализуется, поскольку форма не была отправлена ​​с помощью кнопки. Для значения элемента формы, которое должно быть включено в сериализованную строку, элемент должен иметь атрибут имени. Данные из элементов выбора файла не сериализованы ». Ссылка: http://api.jquery.com/serialize/ –

1

Я хотел бы захватить все события на странице с помощью:

$(document).click(function (obj) { 
    if ('equipmentSetup' === obj.target.id) { 
     $('#form').submit(); 
    } 

....

Затем добавьте оператор if, ищущий «id» кнопки, которую вы хотите. Не используйте имя или идентификатор «отправить». Я забыл, почему, но я помню, что это вызвало проблему для меня.

2

Просто сделай это,

HTML

<button type="submit" name="action[update]" value="1">Update</button> 
<button type="submit" name="action[delete]" value="1">Delete</button> 

PHP

$action = isset($_POST['action']['update']) ? 'update' : 'delete'; 

Вы не может зависеть от JavaScript, чтобы сказать вам, которым кнопка была нажата, если пользователь имеет JavaScript отключен, ваша форма нарушена.

+0

Если у вас более двух, применяется одна и та же логика, но вы хотите использовать оператор switch. – xmarcos

1

Вы можете попробовать изменить кнопки типа = "button" и дать им идентификаторы. При этом, вы можете использовать JQuery линии (не в состоянии проверить мой синтаксис ниже, но думаю, что я получил это право)

$('form button').click(function(){ 
    if($(this).attr('id') = "button1"){ ...button 1 clicked} 
    ..process form here.. 
}); 

бы это сделать?

Смежные вопросы