0

データベースからコンテンツのリストをエコーアウトしており、各アイテムの横に星のアイコンがあります。ユーザーが星をクリックすると、データベースでそのコンテンツが見つかり、そのフィールドの「人気」の値(「いいね」ボタン)が変更されるようにしようとしました。私は、各スターをタグでラップし、各フォームのIDを「formWithId」x ...... xが表示されているコンテンツのIDにすることで、これを実行しようとしています。

ここにコードがあります:

echo "<form  method = 'post' class ='formId".$row['id']."' id = 'likePostWithId".$row['id']."'>";
      //all inputs are hidden and send the 'id' value of the content so the php file will know which field of the table to like in the mysql database
echo "<input type ='text' name = 'email' style = 'display: none;' value= '".$row['email']."' >
      <input type ='text' name = 'id' style = 'display: none;' value= '".$row['id']."' >
      //this is the star icon
      <i class = 'ss-icon' id = '".$row['id']."'>&#x22C6; </i>";
echo "</form>"; 

だから、今私が必要としているのは、jquery validate を使用してフォームを送信できるようにすることです....しかし、私が抱えている問題は、私が常に jquery 検証を (送信ハンドラーを使用して) 使用して、ID が事前定義されている特定のフォームを送信していることです。データベースから送信されたコンテンツの ID に基づいて変更しないでください。

ここに私がしようとしている私の例があります

$(document).ready(function(){
    $(".ss-icon").click(function(){
       var id= $(this).attr('id');
       $("#likePostWithId"+id).submit();
    });
});

$(function(){
    $(".ss-icon").click(function(){
    //this doesn't work...
    $("#likePostWithId").validate({
         submitHandler:function(data){
            //do stuff
          }
     )};
)};

どこを参照してください$("#likePostWithId")...正しいIDを持つものを選択する方法がわかりません(例)、または番号がmysqlコンテンツのIDである$("#likePostWithId"+id)と解釈されます#likePostWithId6$likePostWithId7

とにかく、これがあなたに明確になるかどうかはわかりません...この質問の仕方がよくわかりません..しかし、基本的には、id(mysqlからのコンテンツのid)をphpフォームに送信する必要がありますページをリロードせずに

どんな助けでも大歓迎です。

ありがとう

4

4 に答える 4

1

これは、jQueryのAjaxを使用して実現できます。各スターアイコンに一意のIDを指定するだけです(このIDは、インデックスキーなどのMySQLデータと何らかの関係がある必要があります)。jQueryのAjax関数を使用してこの引数(id)をphpスクリプトに渡します。このスクリプトは、人気フィールドエントリを変更するデータ(インデックスなどのMySQLエントリごとに一意)を取得します。成功機能では、データが正常に投稿されたことを通知するアニメーションまたは色の変更をスターアイコンに与えることができます。試してみてください。

于 2013-02-20T06:35:14.003 に答える
0

多分あなたは$.post()あなたの問題を解決するために使うことができます。そうすれば、フォームをいじくり回す必要はありません。

$(document).ready(function(){
    $(".ss-icon").click(function(){
       $.post('yourPHPUrl', { contentID: $(this).attr('id') }, successFunction);
    });
});

function successFunction(data) {
    if (data.success) { //just a sample, you can give a JSON-Object back to the success function
        $('#' + data.ID).css() ... // do something with the clicked star
    }
}
于 2013-02-20T06:44:38.990 に答える
0

これを試して

 $(function(){
   $(".ss-icon").click(function(){
      var id= $(this).attr('id');
      $("#likePostWithId" + id ).validate({ <--- here
      submitHandler:function(data){
         $("#likePostWithId"+id).submit();
      }
   )};
 )};

ただし、これはフォームを送信します... ajaxを使用して、リロードせずにフォームを送信できます

于 2013-02-20T06:35:59.580 に答える
0

あなたのコード:

$(function(){
    $(".ss-icon").click(function(){
        //this doesn't work...
        $("#likePostWithId").validate({
             submitHandler:function(data){
                 //do stuff
             }
        )};
    }); // <-- this was missing
)};

ブラケットのセットがありませんでしたが、そのように実装するべきではありません。クリックするたびにプラグインを再初期化するだけです。(プラグインにはすでにclickイベント ハンドラーが組み込まれており、自動的にキャプチャされます。)

.validate()プラグイン を初期化するために、DOM 内で1 回呼び出す必要があります。ドキュメントによると、コールバック関数は「検証後に Ajax 経由でフォームを送信するのに適した場所」です。submitHandler

$(function(){

    $("#likePostWithId").validate({ // initialize plugin
         // other options & rules,
         submitHandler: function(form){
             // do ajax
             return false; // blocks form redirection since you already did ajax
         }
    )};

)};

デモで遊ぶ: http://jsfiddle.net/XnfDc/

于 2013-02-20T16:09:39.773 に答える