【问题标题】:jQuery - click on a link dynamically generated by AJAXjQuery - 点击由 AJAX 动态生成的链接
【发布时间】:2015-03-03 16:35:33
【问题描述】:

我阅读了很多关于这个问题的不同帖子,但我无法解决我的问题。 我正在尝试在动态生成的内容上创建一个简单的灯箱。

   $(document).ready(function() {
  $("body").on("click", "button", function() {
    $("button").removeClass("selected");
    $(this).addClass("selected");

    var flickrAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
    var animal = $(this).text();
    var flickrOptions = {
      tags : animal,
      format: "json"
    };
    var displayPhotos = function(data) {
      var photoHTML = "<ul>";
      $.each(data.items, function(i, photo) {
        photoHTML += '<li class="grid-25 tablet-grid-50">';
        photoHTML += '<a href="' + photo.link + '" class="image">';
        photoHTML += '<img src="' + photo.media.m + '" ></a></li>';
      });
      photoHTML += '</ul>';
      $('#photos').html(photoHTML);
    }
    $.getJSON(flickrAPI, flickrOptions, displayPhotos);

      var $overlay = $('<div id="overlay"></div>');
      var $image = $("<img>");
      var $caption = $("<p></p>");

      //An image to overlay
      $overlay.append($image);

      //A caption to overlay
      $overlay.append($caption);

      //Add overlay
      $("body").append($overlay);

      //Capture the click event on a link to an image
      $("#photos a").click(function(event){
        event.preventDefault();
        var imageLocation = $(this).attr("href");
        //Update overlay with the image linked in the link
        $image.attr("src", imageLocation);

        //Show the overlay.
        $overlay.show();

        //Get child's alt attribute and set caption
        var captionText = $(this).children("img").attr("alt");
        $caption.text(captionText);
      });

      //When overlay is clicked
      $overlay.click(function(){
        //Hide the overlay
        $overlay.hide();
      });
  });
});

Here is my complete code on jsfiddle

AJAX 调用后的点击事件没有触发。 我该如何解决这个问题?

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

您在 DOM 存在之前添加事件发生了什么,您应该做什么等待响应实际呈现所有事件和界面或替换它:

  $("#photos a").click(function(event){
  });

  $(document).on("click","#photos a",function(){

});

这样事件将永远存在...这是我的猜测...我不确定$("#photos a") 是否真的获得了您想要附加事件的元素,但您知道如何添加DOM 上仍然不存在的 DOM 元素的事件。

【讨论】:

  • 它似乎不起作用......只要我点击一张照片,它就会重定向到照片页面而不是显示灯箱
  • 在这里与我分享你的 jsfiddle
  • jsfiddle.net/23gzbqdh/4 它的工作应该在您的代码中存在其他问题,但这回答了您的问题,您可以在我添加的答案中看到上面的图片debugger 声明您可以使用 google chrome 检查器控制台看到它
  • 它有效。非常感谢。我现在只是想弄清楚我的其余代码有什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
相关资源
最近更新 更多