2016-11-25 35 views
3

jQueryでどのボタンが押されたのかを検出しようとしていますが、サーバー側では結果に応じて異なる処理が行われます。どのボタンが押されたかを検出する

jQueryはうまく動作しますが(私は長らくそれについて行っているかもしれませんが)私のコードでは、どちらのボタンを押しても、私は同じ応答をPHPから得る理由を理解できません:" 「を検出しました。誰かが私に間違っていることを教えてくれることを願っています

jQueryの

$(document).ready(function() { 
    $(".btn_add").on("click", function() { //If add btn pressed 
     var id = this.id; 
     var url = "process_ajax4.php?btn=" + this.id; 

     var formdata = $('.myForm').serialize(); 
     $.post(url, formdata, 
      function(data) { 

       $("#results").html(data); //Response 


      }); 
    }); 
    $(".btn_remove").on("click", function() { //If remove btn pressed 
     var id = this.id; 
     var url = "process_ajax4.php?btn=" + this.id; 

     var formdata = $('.myForm').serialize(); 
     $.post(url, formdata, 
      function(data) { 

       $("#results").html(data); //Response 

      }); 
    }); 

}); 

PHPは

<?php 
$btn=$_POST["btn"]; //Other posted variables removed for simplicity 

if($btn="btn_add"){ 

    echo "<h1>Add button detected</h1>"; 
//Do stuff 

} 
elseif($btn="btn_remove"){ 

    echo "<h1>Remove button detected</h1>"; 
//Do other stuff 
} 
?> 

HTMLフォーム

<td> 
    <form id=\ "myForm\" class=\ "myForm\" action=\ "\" method=\ "post\" enctype=\ "multipart/form-data\"> 
     <input type=\ "hidden\" name=\ "user_id\" value=". $collab_userid." /> 
     <input type=\ "hidden\" name=\ "id\" value=".$upload_id." /> 

     <button type=\ "submit\" id=\ "btn_remove\" class=\ "btn_remove\" name=\ "btn_remove\">Remove</button> 
     <button type=\ "submit\" id=\ "btn_add\" class=\ "btn_add\" name=\ "btn_add\">Approve</button> 
    </form> 
</td> 
+0

に提出されることからフォームを防ぐためにクリックします。 – julekgwa

答えて

3

を次のようにあなたがそれ以外のクリックが検出されなかった、あなたのformdataに押されたボタンを追加する必要があります。

$(document).ready(function() { 
    $(".btn_add").on("click", function() { //If add btn pressed 
     var id = this.id; 
     var url = "process_ajax4.php?btn=" + this.id; 

     var formdata = $('.myForm').serialize(); 
     formdata += "&btn=btn_add"; // added the btn 
     $.post(url, formdata, 
      function(data) { 

       $("#results").html(data); //Response 


      }); 
    }); 
    $(".btn_remove").on("click", function() { //If remove btn pressed 
     var id = this.id; 
     var url = "process_ajax4.php?btn=" + this.id; 

     var formdata = $('.myForm').serialize(); 
     formdata += "&btn=btn_remove"; // added the btn 
     $.post(url, formdata, 
      function(data) { 

       $("#results").html(data); //Response 

      }); 
    }); 

}); 
0

私はあなたのコードがOKに見えると思います。

私はphpであなたが= で文字列を比較することはできませんと思う入力パラメータがボタンを追加または削除するためには、strcmp(strA、strB)== 0に変更する必要があります。

1

変更PHPコード

<?php 
    $btn=$_POST["btn"]; //Other posted variables removed for simplicity 

    if ($btn=="btn_add") { 
     echo "<h1>Add button detected</h1>"; 
    //Do stuff 
    } elseif ($btn=="btn_remove"){ 
     echo "<h1>Remove button detected</h1>"; 
    //Do other stuff 
    } 


?> 
1

あなたjquery button取扱いのための2つの別々の機能を有する必要はありません。また、あなたはクリックイベントに

$(document).ready(function() { 
 
    $("button").on("click", function() { //If add btn pressed 
 
     var id = this.id; 
 
     
 
     var url = "process_ajax4.php?btn=" + this.id; 
 
     console.log(url); 
 
     var formdata = $('.myForm').serialize(); 
 
     $.post(url, formdata, 
 
      function(data) { 
 

 
       $("#results").html(data); //Response 
 

 

 
      }); 
 
    }); 
 
    }); 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<td> 
 
    <form id="myForm" class="myForm" action="\" method= "post" enctype="multipart/form-data"> 
 
     <input type="hidden" name="user_id" value=". $collab_userid." /> 
 
     <input type="hidden" name="id" value=".$upload_id." /> 
 

 
     <button type="submit" id="btn_remove" class="btn_remove" name= "btn_remove">Remove</button> 
 
     <button id="btn_add" class= "btn_add" name="btn_add">Approve</button> 
 
    </form> 
 
</td>

を検出しているので、あなたは、PHPでのクエリ文字列を取得するためparse_url()parse_str()を使用することができます。コードからbutton type="submit"を削除することができます。 $btn=$_POST["btn"]; TBN属性は、フォームデータとして渡す必要があります使用するためには、クエリパラメータは文句を言わないあなたは、実際にすべてのjQueryのコードを必要としないこの方法

<?php 
$parts = parse_url($url); 
parse_str($parts['query'], $query); 
$btn = $query['btn']; 

if($btn=="btn_add"){ 

    echo "<h1>Add button detected</h1>"; 
//Do stuff 

} 
elseif($btn=="btn_remove"){ 

    echo "<h1>Remove button detected</h1>"; 
//Do other stuff 
} 
?> 
0

を通じて利用できるようになります。あなたのコードは、ちょうどあなたのproblem.in PHP使用==の代わりを修正するvar url = process_ajax4.phpを作る働き

if(isset($_POST["btn_remove"])) { 
    //Remove button was pressed. 
} 
1

btn_removebtn_add両方がボタンを提出しているので、あなたは使用してフォームを送信するために使用するボタンのどの確認することができます=は、またあなたのボタンにe.preventDefault()を追加すると、 `=`の代わりに `` ==で文字列を比較しているaction='url'

$(document).ready(function() { 
$(".btn_add").on("click", function(e) { //If add btn pressed 
    e.preventDefault(); 
    var id = this.id; 
    var url = "process_ajax4.php"; 

    var formdata = $('.myForm').serialize(); 
    formdata += "&btn=btn_add"; // added the btn 
    $.post(url, formdata, 
     function(data) { 

      $("#results").html(data); //Response 


     }); 
}); 
$(".btn_remove").on("click", function(e) { //If remove btn pressed 
    e.preventDefault(); 
    var id = this.id; 
    var url = "process_ajax4.php"; 

    var formdata = $('.myForm').serialize(); 
    formdata += "&btn=btn_remove"; // added the btn 
    $.post(url, formdata, 
     function(data) { 

      $("#results").html(data); //Response 

     }); 
    }); 

}); 
関連する問題