2011-01-07 10 views
0

私の質問はかなり簡単です。私はmysqlテーブルからテーブルを作成しており、テーブルの各行はデータベースのレコードを保持しています。新しいレコードごとに、新しい行が作成されます。レコードが返されなくなるまで続きます。レコードを削除するオプションを与えたいので、各行に独自のクラス名を渡したいので、PHPコードをクラス名にエコーしようとしています。HTML/PHP質問

それは次のようになります。$行[ 'idは'] 1だった場合

<tr class="name<?php echo $row['id'];?>"> 

クラスは、その後に、name1でしょうか?

さて、私はこれを確認したので、レコードを削除してページをリロードしないためにjQueryを使用しています。

私がしようとしているのは、ユーザーがボタンをクリックしたときに、私はAJAXを使ってdbと画面上のレコードを削除することです。私はそれをデータベースから削除するために働いているが、ページを再ロードせずに画面上で削除するのに問題がある。

$(".delete").click(function(){ 
    var delete_id = "delete_id="+$(this).attr("id") 
    $.ajax({ 
     type: "POST", 
     dataType: "HTML", 
     url: "deleteScript.php", 
     data: delete_id, 
     success: function(data) { 
      $(".name"+$(this).attr("id")).remove(); 
     } 
    }); 
}); 

が、これは画面上のクラス名を使って何を削除しないでください。私のjQueryのコードはここ

のですか?私はアラートを使って.name "+ $(this).attr(" id ")が正しかったと思っていたので、私は今どこが間違っているのか混乱しています。 ?

+0

「すべての行に独自のクラス名を付けたい」と言われるまで、すべてのことが気になりません。レコードを削除するとどういうことでしょうか? – mpen

+2

する必要があります。試してみるとどうなりますか? – lonesomeday

+0

はこの宿題ですか? – used2could

答えて

1

あなたのコードに問題が次の行にある:あなたはAJAXの成功ハンドラ内であるので

$(".name"+$(this).attr("id")).remove(); 

thisはXMLHTTPRequestオブジェクトを指し、ないイベントがトリガされている要素に。成功ハンドラ内で使用するために要素をキャッシュする必要があります。

あなたのコードでは、最終的には次のようになります。また、それははるかに、はるかに高速(20倍以上)$(this).attr('id')以上であるので、私はthis.idを使用していることを

$(".delete").click(function(){ 
    var delete_id = "delete_id="+this.id, 
     self = this; // cache this 
    $.ajax({ 
     type: "POST", 
     dataType: "HTML", 
     url: "deleteScript.php", 
     data: delete_id, 
     success: function(data) { 
      $(".name"+self.id).remove(); // use self rather than this 
     } 
    }); 
}); 

注意。

+0

驚くばかり!これはまさに私が必要としていたものです。どうもありがとうございます! – Chris

+0

20倍?あなたはその状態をどこで見つけましたか? jQueryが存在する場合、その属性をそのまま使用すると考えました。それにかかわらず、このシナリオでは重要ではありません。 – mpen

+1

@Ralph [jsPerf example](http://jsperf.com/native-properties-vs-jquery-attr) 20xは非常に控えめな見積もりです。そして、それは良い習慣を促進することは常に良いです! – lonesomeday

1

$row['id']はあなたがが。

はまた、私はこれがであなたをどのように役立つかわからないことを確認するために、出力HTMLを見ている可能性が1である場合は、[はい、クラス名が「NAME1」になります私は

<td><a href="/delete-row.php?id=<?=$row['id']?>">Delete</a></td> 

の効果に余分な列を追加したい。記録の問題を削除し、これは、ファンシーパンツがあなたの使い慣れたPOSTの人たちが叫び始めるところです。そのため、削除ボタン付きのフォームを使用できる確認ページが表示されるはずです。


あなたは、あなたが技術的には「ID」の代わりに「class」属性を使用する必要があり、jQueryのを使用している場合は、私はまだこの方法、及び、リンクajaxifyそれを行うと思いますので、あなたを別のページに連れて行くことはありません。この方法では、ユーザーがJSを無効にしている場合は爆発することはありません。ユーザーフレンドリーなやり方で削除するだけです。

+0

あなたはPOST !!!!!!!!!!を使用しなければなりません1111one – Breakthrough

+0

Ralphは正しいです(そして彼は答えに私を打ち負かしました - 良い仕事)。あなたの例は大丈夫です。 Idやクラスで行を取得するためにjQueryのようなDOMやlibを使用していない限り、クラスやIDを使用する必要はありません。ああ、ラルフ - SCREAM SCREAM SCREAM !! – gnome

+0

ええ私はクラスごとにjQueryを使って行を取得しようとしています。 – Chris