2013-10-08 383 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()函數被運行的針對某些要求進行一些檢查。但是,當按下修改按鈕時,我不需要執行這些檢查,但由於action ='「。$ _ SERVER ['PHP_SELF']保留了我所有的表單數據,所以我仍然將修改按鈕作爲提交按鈕。

我正在尋找一種方法來修改check_num,這樣如果它可以找出提交時按下的修改,它將不會執行check_num代碼,將其更改爲如下形式:if modifyPressed,do nothing 。else check_num code。或修改修改,使它不是一個仍然能夠保留表單數據的提交按鈕。

實際發生在我的表單中的是它有一堆文本和下拉菜單,那麼用戶會提交它會再次顯示輸入的數據,然後出現三個提到的按鈕(確認,修改,取消)和修改應該將其帶回文本並在數據完好的情況下再次下拉。使用isset在$ _ POST

+3

提交其中有一個名稱屬性按鈕將提交他們的'value'像任何輸入元素,如果他們被點擊的一個,所以'如果(isset($ _ POST ['修改'])){...}'會捕獲這樣的事情。 –

+0

您可以檢查在check_num()函數中按下了哪個按鈕。如果您不想在某些按鈕上提交表單,則必須防止默認操作(=提交表單)。 – djot

+0

@MarcB,OP想要在客戶端而不是服務器上捕獲它。 – epascarello

回答

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

[ '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

基本上最好的解決方案,因爲您的需要是添加檢查按鈕點擊不在表單提交。

<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識別哪一個被點擊。 對於例如: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是的,第一種方法對你更好。爲了解釋我寫了別人。 –