0

そうです、ページ上で実行されるクエリがあり、データベース内のすべてのレコードに対してフォームが出力されます(これは単純化されており、mysql_ *が減価償却されていることはわかっています)。

$sql = "select * from `$table1`";
    $result = mysql_query ($sql) or die(mysql_error());
    while ($row = mysql_fetch_array($result)) 
     { 
       $carid = $row["car_id"]; 
       $carnum = $row["carnum"]; 
       $carlocation = $row["carlocation"];
       $carstate = $row["carstate"];

       echo "<tr id='$carid'>";
       echo "<td>$carnum</td>";
       echo "<td><form action='' method='post' id='form$carid'>";
       echo "<select id='popup' name='ctate'>";
       echo "<option value='In-Service-Bay'>In Service Bay</option>";
       echo "<option value='Awaiting-Service'>Awaiting Service</option>";
       echo "<option value='Service-Complete'>Service Complete</option>";
       echo "</select></td>";
       echo "<select id='popup' name='clocation'>";
       echo "<option value='Carpark-1'>Carpark-1</option>";
       echo "<option value='Carpark-2'>Carpark-2</option>";
       echo "<option value='Carpark-3'>Carpark-3</option>";
       echo "</select></td>";
       echo "<td><input type='submit' name='submit' value='Submit'>";
       echo "</form></tr>";
 }
 echo "</table>";

今私がやりたいのは、ドロップダウンの1つが変更されたときに、そのフォームだけが送信されるようにすることです。これを行うには、JSとAJAXを使用する必要があることがわかりましたが、私はJavaScriptプログラマーではありません。したがって、ページを更新せずにフォームの送信を読んだ後、これを試してみようと思いました。

  print '<script type="text/javascript">';
  print "       

  $('#form1').change(function() 
  {
    console.log('success!');
    $.ajax({ 
    type: 'post',
    url: 'process.php',
    data: $('#form1').serialize(),
    success: function() {
    }
 });
            return false;
 }); 
  </script>";

これで原則として機能します。form1の最初のレコードを変更すると、実行されて「Success!」と出力されます。ログに。ただし、process.phpを呼び出すようには見えませんが、それは私の主な問題ではありません。私が今やりたいのは、これを実装して、すべてのフォームで機能するようにすることです。ページ上のフォームの数は日々大きく異なることを念頭に置いてください。

だから私はこれをしました:

$sql = "select * from `$table1`";
    $result = mysql_query ($sql) or die(mysql_error());
    while ($row = mysql_fetch_array($result)) 
     { 
       $carid = $row["car_id"]; 
       $carnum = $row["carnum"]; 
       $carlocation = $row["carlocation"];
       $carstate = $row["carstate"];


 $formname = "#form".$carid;

 print '<script type="text/javascript">';
 print "        var cnum;";
 print "        cnum = '$formname',";
 print "        

 $(cnum).change(function() 
 {
 console.log(cnum);
  $.ajax({ 
    type: 'post',
    url: 'process.php',
    data: $(cnum).serialize(),
    success: function() {
    }
 });
 return false;
  }); 
 </script>";

       echo "<tr id='$carid'>";
       echo "<td>$carnum</td>";
       echo "<td><form action='' method='post' id='form$carid'>";
       echo "<select id='popup' name='ctate'>";
       echo "<option value='In-Service-Bay'>In Service Bay</option>";
       echo "<option value='Awaiting-Service'>Awaiting Service</option>";
       echo "<option value='Service-Complete'>Service Complete</option>";
       echo "</select></td>";
       echo "<select id='popup' name='clocation'>";
       echo "<option value='Carpark-1'>Carpark-1</option>";
       echo "<option value='Carpark-2'>Carpark-2</option>";
       echo "<option value='Carpark-3'>Carpark-3</option>";
       echo "</select></td>";
       echo "<td><input type='submit' name='submit' value='Submit'>";
       echo "</form></tr>";
 }
 echo "</table>";

ただし、残念ながら、これは機能しないため、それほど単純ではありませんでした。ページ上のすべてのフォームを送信しようとしているのか、それともうまくいかないのか、私にはわかりません。フォーム名をハードに設定し、JSをループに入れておくと、機能しますが、特に必要のないレコードが複数回送信されます。

私が言っているように、私はjavascriptの人ではないので、あなたが私に与えることができるどんな助けも大いに感謝されるでしょう。

ありがとう!

4

2 に答える 2

0

#form1最初の例でに変更するのと同じくらい簡単なはずformです。$('#form1')次に、関数内から参照を次のように変更する必要があります。$(this)

$('form').change(function() 
  {
    console.log('success!');
    $.ajax({ 
        type: 'post',
        url: 'process.php',
        data: $(this).serialize(),
        success: function() {
        }
    });
    return false;
 });

を使用$('form')すると、ページ上のすべてのフォーム要素にイベントが適用されます。jQueryは、どのフォームがイベントをトリガーしたかを知るのに十分賢いので、$(this)はイベントをトリガーしたフォームへの参照です。

于 2013-03-18T11:20:30.167 に答える
0

問題はここにあります:

   echo "<td><input type='submit' name='submit' value='Submit'>";

jQueryのドキュメントから

フォームとその子要素は、submit、length、methodなどのフォームのプロパティと競合する入力名またはIDを使用しないでください。名前の競合は、紛らわしい失敗を引き起こす可能性があります。ルールの完全なリストと、これらの問題のマークアップを確認するには、DOMLintを参照してください。

于 2013-03-18T11:22:41.700 に答える