1

ページの先頭に基本的な AJAX フォーム送信機能があります (この機能をゼロから作成できないため、チュートリアルから盗みました)。私のページの本文には、データベースにあるユーザーIDに対応する値を持つ非表示の入力を持つフォームがたくさんあります。

アイデアは、フォームを送信すると、非表示の値が PHP ページに POST され、MySQL データベースからその ID を持つユーザーが削除されるというものです。それはすべて非常に簡単で、おそらくもっと効率的な方法がありますが、これが私が考えることができる唯一の方法です.

とにかく問題は、私の AJAX 関数が私のページの最初のフォームでしか機能しないことです。フォームを送信すると、ユーザーがデータベースから削除され、ページが更新され、その特定のフォームが消えます。しかし、一番上のフォームの下にあるフォームをクリックしても、何も起こりません。これが私のjQuery関数です:

<script type="text/javascript">


$(document).ready(function(){
    $("#myform").validate({
        debug: false,
        rules: {
            group: {required: true}, 
        },
        messages: {
            group: {required: " Field required.", loginRegex: " Invalid character."},
        },
        submitHandler: function(form) {
            $.post('process_delete_participant.php', $("#myform").serialize(), function(data) {
                $('#results').html(data);
            });
        }
    });
});


</script>

そして、これが私のページの本文にあるものです:

<?php

$query = mysql_query('SELECT * FROM `Participant`');
    if (!$query)
{ 
    die('Query failure: '.mysql_error()); 
}

while($rows = mysql_fetch_array($query))
{

$fname = $rows['firstName'];
$sname = $rows['secondName'];
$id = $rows['idParticipant'];

echo "<form name='myform$id' id='myform$id' action='' method='POST'> ";
echo "<input type='hidden' name='idParticipant' id='$id' value='$id' />";
echo "$fname ";
echo "$sname ";
echo "<input type='submit' name='submit$id' id='submit$id' value='Delete' /> ";
echo "</form>";
echo "<br><br>";

}

?>

したがって、フォームの 1 つの例は次のようになります。

<form name='myform61' id='myform61' action='' method='POST'> 
<input type='hidden' name='idParticipant' id='61' value='61' />John Smith
<input type='submit' name='submit61' id='submit61' value='Delete' /> 
</form>

関数が最上位のフォームでのみ機能する理由はいくつか考えられますが、問題を解決するために関数の構文で何を編集すればよいかわかりません。誰でも知っていますか?

4

2 に答える 2

4

この例のセレクターは、明示的に ID によるものです。$("[id^=myform]") を試すことができます。これは ID の先頭に一致するためです。

また、「$("#myform")」への 2 番目の呼び出しを $(this) に置き換えて、正しいコンテキストを確保します。

編集(追加):

$("[id^=myform]").validate({
        debug: false,
        rules: {
            group: {required: true}, 
        },
        messages: {
            group: {required: " Field required.", loginRegex: " Invalid character."},
        },
        submitHandler: function(form) {
            $.post('process_delete_participant.php', $(this).serialize(), function(data) {
                $('#results').html(data);
            });
        }
    });
于 2012-06-06T13:43:45.443 に答える
2
$("#myform").validate({

これは、ID 'myform' を持つ要素の検証のみを設定します。

最も簡単な方法は、すべてのフォームで呼び出すことです

$('form').validate({

または名前が myform で始まるすべてのフォーム

$('form[id^=myform]').validate({

または特定のクラスを持つすべてのフォームで

$('form.validate').validate({
于 2012-06-06T13:45:05.303 に答える