javascript - 为什么这段代码添加空的 img 标签?

标签 javascript jquery html

此代码允许用户输入搜索词,然后显示来自 Flickr 的一系列具有该标签的图像。这按预期工作,但我不明白为什么会生成这么多 img 标签。

var main = function () {
    "use strict";

    var url = "http://api.flickr.com/services/feeds/photos_public.gne?tags=catss&lang=en-us&format=json&jsoncallback=?";


    var $searchInput = $("<input>");

    $("header").append($searchInput);


    $.getJSON(url, function (flickrResponse) {

        flickrResponse.items.forEach(function (photo) {

            var $img = $("<img>").hide();

            $img.attr("src", photo.media.m);


            $searchInput.on("keypress", function (event) {
                if (event.keyCode === 13) {
                    $img.remove();
                    $img.removeAttr('src');

                    var $tag = photo.tags.split(" ");

                    $tag.forEach(function (tag) {
                        if (tag === $searchInput.val()) {
                            $img.attr("src", photo.media.m);
                        }
                    });
                    $("main .photos").append($img);
                    $img.fadeIn();
                }
            });
            $("main .photos").append($img);
            $img.fadeIn();

        });   
    }).fail(function (jqxhr, textStatus, error) {
        var err = textStatus + ', ' + error;
        alert("Request Failed: " + err);
    });
};

$(document).ready(main);

上面的代码结果是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <body>
      <header><input></header>
      <main>
         <div class="photos">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style=""   src="http://farm9.staticflickr.com/8299/7875996296_734b9c599d_m.jpg">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
             <img style="">
        </div>
      </main>
      <footer> </footer>
      <script src="http://code.jquery.com/jquery-2.1.4.min.js">
      <script src="javascripts/app.js">
     </body>
 </html>

为什么要添加这么多img标签?

最佳答案

您正在为返回数组中的每个项目创建一个新的 keydown 处理程序,您还应该使用隐藏/显示 iamges,而不是删除和设置空白 src

var main = function() {
  "use strict";

  var url = "http://api.flickr.com/services/feeds/photos_public.gne?tags=catss&lang=en-us&format=json&jsoncallback=?";

  var $searchInput = $("<input>");

  $searchInput.on("keypress", function(event) {
    var term = this.value;
    if (event.keyCode === 13) {
      $("main .photos img").hide().each(function() {
        var $img = $(this);
        var tags = $img.data('tags');

        if (tags.indexOf(term) > -1) {
          $img.fadeIn();
        }
      })
    }
  });

  $("header").append($searchInput);

  $.getJSON(url, function(flickrResponse) {
    flickrResponse.items.forEach(function(photo) {
      console.log('x')
      var $img = $("<img>", {
        src: photo.media.m
      }).hide().data('tags', photo.tags.split(/\s+/));
      $("main .photos").append($img);
      $img.fadeIn();
    });
  }).fail(function(jqxhr, textStatus, error) {
    var err = textStatus + ', ' + error;
    alert("Request Failed: " + err);
  });
};

$(document).ready(main);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<header></header>
<main>
  <div class="photos"></div>
</main>
<footer></footer>

关于javascript - 为什么这段代码添加空的 img 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30639564/

相关文章:

javascript - 如何根据 Rails 中的属性值更改记录的颜色?

java - org.springframework.web.bind.MissingServletRequestParameterException : Required String parameter 'text' is not present

java - 验证上传的图像 DPI 和尺寸是否可打印

jquery - Twitter Bootstrap 轮播垂直滑动

javascript - 从 JavaScript 数组中删除 id 的更智能方法

javascript - 当我按下按钮时 JSON 文件不显示

javascript - 尝试打开本地文件时,IE 8.0 访问被拒绝

javascript - HTML 改变 div 颜色。代码不起作用

javascript - 内部 html 单选按钮数组值被写入 for 循环

html - Canvas 上的文字在 IE 中看起来很垃圾...为什么?