1

JSON 形式で返される配列を通過する for ループがあります。これにより、各画像の ID と名前が得られます。次に、いくつかの HTML を含む変数があり、要素のいくつかは応答によって動的に更新されます。次に、お気に入りのSQLデータベースに画像を追加/削除する機能があります。しかし、関数をアンカー タグの onclick イベントに追加し、データベースから返された ID を使用すると、実行が拒否されます (関数と ID が HTML に表示されるようになったとしても)。いくつかのコードでオン....

for (x in data.images) {            

    id = data.images[x].id,
    name = data.images[x].name,
    thumb = data.images[x].thumb    

output = '<div>\
              <a id="hil" href="viewer.php?id='+id+'">\
              <div>\
                   <img width="160px" height="160px" src="'+thumb+'">\
              </div>\
              </a>\

                  <div class="imft">
                      <a id="deladd" onclick="deladd('+id+')" class="deladd">
                          <img src="images/png/color_18/hand_thumbsup.png" />
                      </a> 
                  </div>\
                       <div>'+name+'</div>\
              </div>';

      $('#theImages').append(output); 
      $('#theImagesLoading').html('');
      $('#next').html('More');  

}

実行されない関数は deladd() です。ID は関数に渡されますが、onclick イベントは機能しません。必要に応じて、より多くのコードや情報を提供できます。

事前に助けてくれてありがとう。

Michael Geary の JSON 応答:

{"amount":4,"from":0,"limit":4,"images":{"1":     {"id":"3084f8d07be00e8af2ab4e7810b2e011","name":"Blossom.jpg","thumb":"thumbnails\/43efd305ac4381b2911d2cbaf212f9e0.jpg","ival":0},"2":{"id":"649d38a79f5980735be80156a83a27ff","name":"Wedding Sunflowe...","thumb":"thumbnails\/01dfca88ce1e699a6ab5d0e5c4adac5e.jpg","ival":1},"3":{"id":"ed2a2ff0c4e9ae319cdd791d8643f9e7","name":"Butterfly.JPG","thumb":"thumbnails\/6adcbf9bdf4b803654b291b2744c8a3b.jpg","ival":2},"4":{"id":"2f5e5540eceb27f9332deeb4cb44ae1c","name":"Creek.jpg","thumb":"thumbnails\/14eafef60824b9c755fc1737e6914ef1.jpg","ival":3}}}
4

1 に答える 1

3

このコードにはいくつかの問題があります。

  1. ループを使用しfor..inて配列を反復処理しないでください。代わりに数値forループを使用してください。(これは を使用するオブジェクトではなく、data.imagesを使用する配列であると想定していますが、正しいですか? この JSON データの例を見るとよいでしょう。)[]{}

  2. varすべてのローカル変数の宣言が必要です。

  3. 呼び出し用に生成される HTML コードにはdeladd()、ID を囲む引用符がありません。(IDは数字ではなく文字列だと思います。数字ならそのままでOKです。)

  4. HTML コードにはいくつかの\エスケープがありませんが、それは質問の単なるタイプミスだと思います。

  5. インデントが一貫していません。

これにより、次の項目が修正されます。

for( var i = 0, n = data.images.length;  i < n;  i++ ) {

    var image = data.images[i],
        id = image.id,
        name = image.name,
        thumb = image.thumb;

    var output =
        '<div>\
            <a id="hil" href="viewer.php?id='+id+'">\
                <div>\
                    <img width="160px" height="160px" src="'+thumb+'">\
                </div>\
            </a>\
            <div class="imft">\
                <a id="deladd" onclick="deladd(\''+id+'\')" class="deladd">\
                    <img src="images/png/color_18/hand_thumbsup.png" />\
                </a>\
                </div>\
                <div>'+name+'</div>\
        </div>';

    $('#theImages').append(output); 
    $('#theImagesLoading').html('');
    $('#next').html('More');  
}

さらに、このイベント ハンドラーを追加するには、onclick属性の代わりに他の方法を使用することをお勧めします。しかし、これで今のところはうまくいくはずです。

于 2013-03-27T17:38:07.973 に答える