0

計画:

基本的に、「item_name」、「item_id」、および「item_shortcode」を含むテーブルに格納された一連の衣類アイテムがあります。ユーザーがリンクをクリックすると、アイテムを配列に追加する必要があるため、衣類アイテムごとにリンクが必要です(選択された配列)


mySQL データベースから収集したデータに基づいて JavaScript オブジェクトを作成し、div がメソッドにクリックされたときにそのデータを関数に渡そうとしています。

これは例です:

<?php 
    while($row = mysql_fetch_array($results)){ 
?>

<script>
    var item = new Object();
    item.itemName = <?php echo json_encode($row['item_name']); ?>;
</script>

<?php
            echo "<div id=\"".$row['item_name']."\" class=\"choice\" onclick=\"SetSelectedChoice(item);\">";
            //echo $row['item_name'];
            echo "</div>";
        }
    }
?>

編集: これは、item_name だけでなく、オブジェクトに大量のデータを入力する例にすぎません

問題は、最後のオブジェクトが while ループのすべての div に割り当てられているように見えることです。

誰かが私が間違っているところを指摘していますか?

4

2 に答える 2

0

反復ごとにアイテムを再定義しています。このようなことをしてみませんか:

編集ごとに、アイテム配列を作成してループに入力できます。

<script type="text/javascript">
    var objects = new Array();
</script>

<?php while($row = mysql_fetch_array($results)): ?>
    <script type="text/javascript">
        var item = new Object();
        item.itemName = '<?php echo json_encode($row['item_name']); ?>';
        objects.push(item);
    </script>
    <div id="<?php echo $row['item_id']; ?>" class="choice">
            <?php echo $row['item_name']; ?>
    </div>
<?php endwhile; ?>

次に、ループの外側のjsで:

$('.choice').on('click', function(){
    SetSelectedChoice($(this).html());
});

function SetSelectedChoice(name)
{
    for(var i = 0; i < objects.length; i ++)
    {
        if(objects[i].itemName == name)
        {
            //do something
        }
    }
}

注: 名前を比較するために、この種の奇妙なループはあまりお勧めしません。この関数に名前を渡して他に何をしているのかわかりません。項目 ID またはインデックス値を渡し、ループではなく配列内の項目に直接アクセスします。わかる?

基本的にonclickの使用はやめましょう。全世界がリスナーにもっと傾いています。次に、オブジェクトを作成する必要はまったくありません。あなたはそれを使用していないようで、使用したとしても、文字列の場合のように名前を一重引用符で囲みませんでした。第三に、php から抜け出して html を書いてください。よりクリーンで簡単です。さらに、アイテムの id を id パラメータに割り当てます。要素の ID に名前とスペースが含まれていると、非常に見苦しくなります。また、例では使用していないため、実際には必要ないようです。$(this).attr('id')それでも、オンクリックリスナーのようにアクセスしたい場合に備えて、そこに入れました。

しかし、私がポイントを逃した場合は、おそらくあなたが明確にすることができ、あなたのニーズによりよく合うように更新するかもしれません.

于 2012-12-06T22:08:08.617 に答える
0

正直なところ、私が本当に理解できたかどうかはわかりませんが、もしそれが正しければ、while ループを実行するたびに item-object を上書きするだけです。最後のループの後 (出力の後)、変数 "item" はループの最後の結果に設定されるため、任意の div をクリックすると、ループの最後の項目である "item" が返されます。

解決策として、div の行名をパラメータとして保存してみてください。

echo "<div id=\"".$row['item_name']."\" class=\"choice\" onclick=\"SetSelectedChoice(\'".$row['item_name']."\');\">";
于 2012-12-06T22:08:12.297 に答える