0

私の PHP スクリプトはデータベースにクエリを実行し、行を li 要素として jQuery ダイアログの div に返します。これは、クエリ行の応答を処理する PHP の while ループで配列を作成することによって行われます。各 li 要素には、データ、HTML ボタン、およびボタンがクリックされたときにその li 要素で実行される JavaScript があります。

各 li 要素に同じ ID で「悪い HTML」を記述すると、JavaScript が実行されますが、最初の li 要素でのみ実行されます。各 li 要素に一意の ID を付けて「良い HTML」を作成すると、javascript を実行できません。私は多くのことを調査して試しましたが、これを修正するためにこれほど複雑なものは見つかりません。私は何をすべきか?これがコードを削除したものです。問題は長い $error_ListActives 行にあるようですが、私は提案を受け付けています。

$rowCount = 0;
while ($row = mysql_fetch_array($fetch)) {
    $storedStreetAddress = $row["streetAddress"];
    $storedCity = $row['city'];
    $error_NumberOfActives = "<li>Welcome back. You have . . .</li>";
    $errorMessages[0] = $error_NumberOfActives;
    $idMaker = "inactive" . $rowCount;
    $error_ListActives = "<li> $storedStreetAddress, $storedCity $idMaker
    <button type='button' id=$idMaker onclick='makeInactive()'>Pause this</button>
    <script type='text/javascript'>function makeInactive()
    //do stuff 
    {document.getElementById($idMaker).innerHTML='Inactive Completed';}
    </script> </li>";
    $errorMessages[] = $error_ListActives;
    $rowCount++;
    }
foreach( $errorMessages as $statusMessage ) {
    echo $statusMessage;
}

具体的にしてください。コードが役に立ちます。私は PHP の初心者なので、この分野の一般的な指示にはあまり従いません。

4

3 に答える 3

2

while ループ内で JavaScript 関数を記述しているため、ここで多くの問題が発生することになります。これは、同じ関数の複数のコピーを取得し、最後の 1 つだけが実際に起動することを意味します!

これを修正するには、汎用の JavaScript 関数を作成し、作業中の要素の でmakeInactive(id)呼び出すだけです。id

PHP ループの外側:

<script type='text/javascript'>function makeInactive(id)
//do stuff 
{document.getElementById(id).innerHTML='Inactive Completed';}
</script>

次に、php ループを次のように変更します。

while ($row = mysql_fetch_array($fetch)) {
$storedStreetAddress = $row["streetAddress"];
$storedCity = $row['city'];
$error_NumberOfActives = "<li>Welcome back. You have . . .</li>";
$errorMessages[0] = $error_NumberOfActives;
$idMaker = "inactive" . $rowCount;
$error_ListActives = "<li> $storedStreetAddress, $storedCity $idMaker
<button type='button' id='$idMaker' onclick='makeInactive($idMaker)'>Pause this</button>
 </li>";
$errorMessages[] = $error_ListActives;
$rowCount++;
}
于 2013-04-26T14:40:15.530 に答える
0

なぜだめですか:

<button onClick="makeInactive(<?php echo $row['id'] ?>);">...</button>

ID コードをパラメーターとして MakeInactive() 呼び出しに埋め込みます。他の代替手段は、単にいくつかの DOM を使用することです。

<li id="xxx"><button onclick="makeInactive(this);">...</button></li>

<script>
function makeInactive(el) {
  el.getParent('li').disable(); // not real code, but shows the basic idea
}
</script>
于 2013-04-26T14:40:29.983 に答える
0

まず、ページでまったく同じ関数を複数回作成しています。makeInactive()他のボタンは、使用する機能を認識していません。すべてのボタンに同じクラスを与えてから、ボタンがクリックされたときに起動するページに含まれる 1 つの関数を作成してみませんか。

問題はありませんが、これは一種の悪いマークアップです。

于 2013-04-26T14:41:07.083 に答える