2013-10-08 4 views
0

У меня есть форма, которая имеет 3 кнопки:Javascript/PHP onSubmit - какая кнопка была нажата?

<input type='submit' name='mconfirm' value=' Confirm '> 

<input type='submit' name='modify' value=' Modify '> 

<input type='button' name='cancel' value=' Cancel ' onClick='goVachSub();'></td></tr> 

форма также делает что-то вдоль линий:

<form name='achievement_modify' method='post' onSubmit='return check_num();' action='".$_SERVER['PHP_SELF']."'> 

Когда либо представить кнопки нажаты, функция check_num() запускается, который происходят некоторые проверки некоторых требований. Тем не менее, мне не нужны эти проверки для запуска при нажатии кнопки изменения, однако у меня есть кнопка изменения в качестве кнопки отправки из-за действия = '". $ _ SERVER [' PHP_SELF '], который сохраняет все мои данные форм.

Я ищу способ изменить check_num таким образом, что если он сможет определить, что изменение было нажато на submit, оно не будет выполнять код check_num. Измените его так, чтобы это было похоже: if modifyPressed, ничего не делать else check_num или изменить модификацию таким образом, что она не является кнопкой отправки, которая еще может сохранять данные формы.

Что на самом деле происходит в моей форме - это куча текста и выпадающих списков, после чего пользователь отправил бы Затем введенные данные будут отображаться снова, а затем появятся три упомянутые кнопки (Подтвердите, Modify, Cancel), а Modify должен вернуть его обратно в текст и снова упасть с неповрежденными данными.

+3

представить кнопки, которые имеют атрибут имя будет представлять их 'value' как любой входной элемент, если они одно, что была нажата, так' если (Исеть ($ _ POST [ 'изменить '])) {...} 'будет захватывать подобные вещи. –

+0

Вы можете проверить, какая кнопка была нажата в вашей функции check_num(). Если вы не хотите отправлять форму на определенные кнопки, вам просто нужно предотвратить действие по умолчанию (= отправить форму). – djot

+0

@MarcB, OP хочет захватить его на клиенте, а не на сервере. – epascarello

ответ

0
<?php 
echo (isset($_POST['mconfirm']))?("mconfirm was pressed"):("mconfirm wasn't pressed"); 
?> 

использованием IsSet на $ _POST [ 'nameattr'] будет сказать вам, если кнопка была подана или нет.

Предполагая, что вы нажали кнопку отправки «mconfirm», приведенный выше код будет вызван «mconfirm».

подхода без тройного оператора:

<?php 
if (isset($_POST['mconfirm'])) { 
      // mconfirm was pressed 
     } 
     elseif (isset($_POST['modify'])) { 
      // modify was pressed 
     } 
     else { 
      // noone of them was pressed 
     } 
?> 

Это также можно сделать с помощью JavaScript, конечно, но если вы НЕ должны проверить это точно, когда пользователь нажимает на кнопку, то это прекрасно, чтобы сделать это с php.

Надеюсь, это поможет.

Редактировать после комментария: отлично, а затем использовать javascript, когда я впервые проверил сообщение, которое не было написано.

проверка кнопка, которая нажимается с JQuery (JQuery в тегах, если я не буду неправильно):

$('input[name=mconfirm]').click(function(){ 
// mconfirm was pressed, check what you need 
}); 

скрипку: http://jsfiddle.net/hEQ4Q/

Чтобы получить значение:

$('input[name=ciccio]').click(function(){ 
    alert($(this).val()); 
}); 
+0

OP хочет запустить JS-функцию только при нажатии на определенную кнопку! Не проверяйте, что было нажато на сервере. – epascarello

+0

Простите, сэр, это не было написано, когда я впервые проверил сообщение. Я обновил сообщение выше, показывая удобный способ проверить, какая кнопка была нажата с помощью jQuery. – briosheje

0

В основном лучшее решение, так как вам нужно добавить проверку на кнопку, не на форме submit.

<input type='submit' name='mconfirm' value=' Confirm ' onclick="return check_num();"> 

<input type='submit' name='modify' value=' Modify '> 

<input type='button' name='cancel' value=' Cancel ' onClick='goVachSub(); return check_num();'> 

Или в JQuery

$('your form selector').find('input[type="submit"]').click(function(e){ 
     var name=this.name; 
     if(name!="modify"){ 
     //do your check 
     } 
}); 

К сожалению, нет никакого решения для этого в качестве объекта события не содержат данные о кнопке отправки, через которую подчиненную форму срабатывали, как вы можете также назвать отправьте форму через javascript без нажатия кнопки отправки.

Для mozilla только если вы создаете подачу, запускается кнопкой отправки.

<form name='achievement_modify' method='post' onSubmit='return check_num(event);' action='".$_SERVER['PHP_SELF']."'> 

// на вашей функции check_num

function check_num(e){ 
    var targetBtn=e.explicitOriginalTarget; 
    if(targetBtn.name!="modify"){ 
     //do stuff 
    } 
} 

Лучший способ справиться только через кнопки, но если вы даже хотите, какая кнопка нажата, установите кнопку события на все кнопки, которая будет устанавливать переменной или атрибутом в форме, которая будет hwlp, чтобы определить, какой из них щелкнут. Для Ex: JQuery пример

var form=$('your form selector'); 
form.find('input[type="submit"]').click(function(e){ 
     var name=this.name; 
     form.attr("data-triggeredBy",name); 
}); 

//than in your check num function 
function check_num(){ 
    var btnName=$('your form selector').attr("data-triggeredBy"); 
    if(btnName!="modify"){ 
    //do stuff 
    } 
} 
+0

На самом деле, я думаю, что первая идея, которую вы упомянули, полностью сошла с ума и, возможно, на самом деле сработала ... Мне просто нужно отменить onSubmit и поместить функцию onClick. Когда форма загружается снова с нажатой кнопки модификации, она все еще имеет данные массива $ _POST из-за действия отправки. – user2859406

+0

@ user2859406 Да, первый подход лучше для вас. Просто для объяснения я написал другие. –

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