0

スクロールして作業コードを見つける

AJAX 編集プラットフォームで作業していますが、編集用のテキスト フィールドの設定に問題があります。

これまでの私のコード:

以下の Javascript は、最初の送信を処理します。

<head>
<script type="text/javascript">
if(window.ActiveXObject) var ajax = new ActiveXObject('Microsoft.XMLHTTP');
else var ajax = new XMLHttpRequest();

function edit()
{
   var doc_id = document.getElementById("doc_id").value;
   ajax.open('GET', 'ajax.php?doc_id='+doc_id, true);
   ajax.onreadystatechange = function()
   {
      if(ajax.readyState == 4)
      {
         document.getElementById('content').innerHTML = ajax.responseText;
      }
   }
   ajax.send(null);
}
</script>
</head>

以下の SQL は、最初の選択クエリとその情報の表示を処理します。

$query = 'SELECT pp.`physician_id`, pp.`physician_first_name`, pp.`physician_last_name`, pp.`featured`, ';
$query.= 'FROM `primary_physicians` AS pp ';
$query.= 'ORDER BY pp.`physician_id` ';

<body>
<div id="container">
  <?php
    $result = mysql_unbuffered_query( $query );
    echo "<table border='1'>"; 
    while ($row = mysql_fetch_assoc($result))
    {   
        echo "<tr>";
        $physician_id = $row['physician_id'];
        echo "<td>" . $row['physician_id'] . "</td>";
        echo "<td><div id='content'><input id='doc_id' type='hidden' value='$physician_id' />" . $row['physician_first_name'] . "<br /><input type='button' value='Edit' onclick='edit();'></div></td>";
        echo "<td>" . $row['physician_last_name'] . "</td>";
echo "</tr>";
    }
    echo "</table>";

?>
</div>
</body>
</html>

また、ユーザーが「コンテンツ」div 内の「編集」ボタンをクリックすると、「ajax.php」ファイルがリクエストを処理します。

    $client_id = $_GET['doc_id'];
$client_query = 'SELECT pp.`physician_id`, pp.`physician_first_name`, pp.`physician_last_name`, pp.`featured` ';
$client_query.= 'FROM `primary_physicians` AS pp WHERE pp.`physician_id`=' . $client_id . '';
$client_result = mysql_unbuffered_query( $client_query );

while ($client_row = mysql_fetch_assoc($client_result))
    {
    echo "<input type='text' value='$client_row[physician_first_name]' />";
    }

何を示している以下:

最初のページ読み込み:

テーブルディスプレイ

「編集」ボタン (クライアント/ID に関連付けられたものだけでなく、使用可能なボタンのいずれか) を押す: 編集しようとすると、クライアント ID #1 が表示されます

いずれかの編集ボタンを押すと、クライアント ID #1 のテーブル行にクライアント ID #2 が表示されます (クライアント ID #2 の行にはありません)。 いずれかの編集ボタンを押すと、クライアント ID #1 のテーブル行内にクライアント ID #2 が表示されます

コンテンツ div 内に何かを設定し、何らかの方法で「edit()」関数に関連付ける必要があると推測していますが、while ループ内でスクリプトを設定しないと、その方法を理解できません (これは本当にしたくない)。

以下の作業コード

Javascript (最初の送信と表示):

<head>
<script type="text/javascript">
if(window.ActiveXObject) var ajax = new ActiveXObject('Microsoft.XMLHTTP');
else var ajax = new XMLHttpRequest();

function hello(e)
{
   /* this was once document.getElementById("doc_id").value;*/
   var doc_id = e.currentTarget.id;
   ajax.open('GET', 'ajax.php?doc_id='+doc_id, true);
   ajax.onreadystatechange = function()
   {
      if(ajax.readyState == 4)
      {
         /*this was without the '+doc_id' document.getElementById('content').innerHTML = ajax.responseText; */
         document.getElementById('content'+doc_id).innerHTML = ajax.responseText;
      }
   }
   ajax.send(null);
}
</script>
</head>

PHP/MySQL:

<body>
<div id="container">
  <?php
    $result = mysql_unbuffered_query( $query );
    echo "<table border='1'>"; 
    while ($row = mysql_fetch_assoc($result))
    {   
        echo "<tr>";
        $physician_id = $row['physician_id'];
        echo "<td>" . $row['physician_id'] . "</td>";
            //note change to the 'content' div (addition of $physician_id to make it truly unique; this ties into the javascript above.
        echo "<td><div id='content$physician_id'>";
            //note changes to input id and button id, as well as the 'onclick' function.
            echo "<input id='doc_id_$physician_id' type='hidden' value='$physician_id' />" . $row['physician_first_name'] . "<br /><input type='button' id='$physician_id' value='Edit' onclick='hello(event);'></div></td>";
        echo "<td>" . $row['physician_last_name'] . "</td>";
echo "</tr>";
    }
    echo "</table>";

?>
</div>
</body>

最初の MySQL クエリまたは ajax.php への変更はありません

4

1 に答える 1

1

要素に問題がありますid。id属性はドキュメント内で一意である必要があることに注意してください。多数の要素に同じIDを使用しています。

td><div id='content'><input id='doc_id' type='hidden' ...

ループ内。

次に、Javascriptを使用しますdocument.getElementById('doc_id')。JSは、ページ上にこれを持つ要素が1つしかないことを想定してidいるため、常に最初に見つかった要素を返します。

編集:

適切な値を取得するには、JS関数も変更する必要があります。

編集ボタンの使用:onclick="edit(event)"

そしてJSでは:

function edit(e) {
    buttonId = e.currentTarget.id;
    //use the button id to find the proper value
}

もちろん、「編集」ボタンでIDを設定し、入力したIDに対応させる必要があります。たとえば$i、ボタンIDとdoc_id_$i入力IDに使用します。

また、jQueryを確認することをお勧めします。これは、ここで達成しようとしている多くのことを容易にするのに役立ちます。

于 2013-02-22T12:18:23.783 に答える