2012-05-12 36 views
2

各liには、クリック時に削除するための削除ボタンと、データベースから選択したボックスデータを含むリストがあります。 id biz_watch '。$ biz_watch_idを作成しました。個々のボックスに固有のものです。サーバー側PHPスクリプトに$ .get呼び出しを使用して、テーブル行を削除します。jqueryの削除ボタンはデータベースから行を削除できません

しかし、スクリプトは機能しません。 get関数を削除すると、ボックスを削除できますが、.getコマンドを使用するとボックスを削除できなくなります。以下はコードです

foreach($biz_watchlist as $biz_watchlist1){ 
     echo '<li class="biz_watch" id="biz_watch'.$biz_watch_id.'">'; 
     echo '<table style="width:100%">'; 
     echo '<td style="width:50%">'; 
     echo $biz_watch_details['5']; 
     echo ' | <a class="remove_watch" id="remove_watch'.$biz_watch_id.'">remove</a>'; 
     echo '</td>'; 
     echo '<td>'; 
     echo '<span style="float:right">'.$biz_watch_details['19'].'</span>'; 
     echo '</td>'; 
     echo '</table>'; 
     echo '</li>'; 
    } 

    <script type="text/javascript"> 
    $(document).ready(function(){ 
     $('.remove_watch').click(function(){ 
      var li = $(this).closest('li.biz_watch'); 
      var action = '../delete_watchlist.php'; 
      var data = { id:13}; 
       $.post(action, data, function(){ 
       li.fadeOut('slow', function() { 
        li.remove(); 
       }); 
       }); 
     }); 
    }); 
    </script> 

jquery4u blogはうまくそれを合計post()

$.post('/.../delete_watchlist.php', {id: $(this).closest('.biz_watch').attr('id')},function(){ 
    $(this).closest('.biz_watch').fadeOut("slow"); 
}); 

get()の上に私のサーバー側のスクリプト

 <?php 
     $id = $_POST["id"]; 

     $query = "DELETE FROM dz0yn_biz_watchlist WHERE biz_id = $id"; 
     $delete_watch_row = mysql_query($query); 
     ?> 
+0

このリンクは正しくありますか? '/.../delete_watchlist.php' あなたはそれらの点の1つを必要としないかもしれません...=) – benqus

+0

あなたのIDはおそらく 'remove_watch '。$ biz_watch_id'ですが、onlickハンドラでのみ' $ biz_watch_id'が必要です。 – Smamatti

+0

@benqusはい。リンクは正しいです。私はURLを短縮するためにそれを...に置き換えました。 – Lawrence

答えて

2
  1. 。それはちょっと無意味です。最初の/を削除する必要があります( '../delete_watchlist.php')。

  2. スクリプトを分割します。あまりにも多くのものを1つの行に結合しようとしていますが、これは問題を混乱させます。

これは、サーバー側のスクリプトが成功したと仮定して、これを実行する必要があります。

$(document).ready(function(){ 
    $('.remove_watch').click(function(){ 
     var li = $(this).closest('li.biz_watch'); 
     var action = '../delete_watchlist.php'; 
     var data = { id: li.attr('id').substr(9) }; 
     $.post(action, data, function(){ 
      li.fadeOut('slow', function() { 
       li.remove(); 
      }); 
     }); 
    }); 
}); 
+0

質問に対するコメントに注意してください。彼はスクリプトのパスが正しいことを知っています。彼はちょうどこの質問のためにそれを短縮しました。 –

+0

Ahh ok。逃したよ。 – Chris

+0

@Chris oh whao!魅力のように働きます。ありがとう!うーん。ただ、ボックスは消えてしまいましたが、クエリは機能しません。 – Lawrence

2

あなたが使用する必要があります:

もしtフォームの処理は、等式(すなわち、等式)である。それは世界の状態に永続的な観察可能な効果がない)、フォームメソッドはGETでなければなりません。多くのデータベース検索では、目に見える副作用がなく、問合せフォームの理想的なアプリケーションを作成します。

フォームの処理に関連するサービスに副作用(たとえば、データベースの変更やサービスへのサブスクリプション)がある場合、そのメソッドはPOSTでなければなりません。

編集

あなたはテーブルが完全に作成される前に.readyが呼び出されることを意味する動的にテーブルを作成しています。したがって、ほとんどの場合、すべての行でクリック機能が作成されません。

イベントを後で作成する可能性のあるオブジェクトに適用するには、on()イベントを使用する必要があります。

$(document).ready(function(){ 
    $('.remove_watch').on("click", function(){ 
     $.get('/.../delete_watchlist.php', {id: $(this).closest('.biz_watch').attr('id')},function(){ 
      $(this).closest('.biz_watch').fadeOut("slow"); 
     }); 
    }); 
}); 

編集

一つの最終試し:P。 biz_watch12全体ではなく12のIDだけが必要なので、replaceを使用してidからbiz_watchを削除してサーバーに送信することができます。 /自体を参照する絶対パスにそれを回すと相対ディレクトリ(..)の接頭辞をつける

$(this).closest('.biz_watch').attr('id').replace("biz_watch", ""); 
+0

はい。 $(this).closest(.biz_watch ')の下に警告( "成功")を挿入しました。それは警告ボックスを示した。しかし、ボックスはまだ消えません。 – Lawrence

+0

$(this).closest(.biz_watch ')ではありません。fadeOut( "slow");この場合の成功ハンドラです。つまり、.postコマンドが成功した後、このコマンドが成功すると、 - > $(this).closest(.biz_watch ')。fadeOut( "slow");続行しますか? – Lawrence

+0

いいえ、どこでそれを捕まえることができますか? Firebugコンソールのエラーログにエラーが表示されません。 – Lawrence

関連する問題