JQuery - .load() 后的 .hover() 图像并 .append()ed 到 .find()div

发布于 2024-10-13 22:45:58 字数 1391 浏览 1 评论 0原文

嗨:)我遇到了一些麻烦。

(简短形式:每当页面由 .each() 填充时,.hover 和 .click 函数将不起作用。尽管如果我手动填充页面,.hover() 和 .click() 会像魅力一样工作)

以前我有这个:

<imgThumb imgn="1">thumb</imgThumb>
<imgThumb imgn="2">thumb</imgThumb>

还有这个,

   $("imgt").hover(
 function () {
  var imgN = $(this).attr("imgn");
  var img = new Image();
  $(img).load(function(){
 $(this).hide();
 $("#mainRight_PubSpot").append(this);
 $(this).fadeIn();
  }
  )
  .attr("src","image/thumb"+imgN+".jpg");
 }, 
 function () {
   $("#mainRight_PubSpot").find("img:last").remove();
 }

); 工作起来就像一个魅力,没什么大不了的。直到我用这个替换

 $.get('gallery.php',
 function(data){
 var obj = jQuery.parseJSON(data); 
 //alert(obj)


 $.each(obj,function(index, value){
   //alert(this);
   var n = index+1;
   //alert(""+n+" "+index);
   var nimg = new Image();
    $(nimg).load(function() {
     $(this).hide();
     /*$("#galImg").css({
      'width':50,
      'height':50
     });*/
     $("#mainLeft_imgHold").append("<imgt imgn="+n+"></imgt>")
     $("#mainLeft_imgHold").find('imgt:last').append(this);
     $(this).fadeIn();
    }).attr({
     src:""+this,
     imgn:""+n,
     id:"imgThumb"
     });
  });
     }
 );

现在图像加载毫不费力,尽管 .hover 和 .click 功能不起作用。

有人知道是什么原因导致了这一切骚动吗?

Hi :) I've ran into a bit of a trouble.

(short-form: whenever the page is populated by .each() the .hover and .click functions wont work. althought if i populate the the page manually .hover()s and .click()s work like a charm)

formerly i had this:

<imgThumb imgn="1">thumb</imgThumb>
<imgThumb imgn="2">thumb</imgThumb>

and this,

   $("imgt").hover(
 function () {
  var imgN = $(this).attr("imgn");
  var img = new Image();
  $(img).load(function(){
 $(this).hide();
 $("#mainRight_PubSpot").append(this);
 $(this).fadeIn();
  }
  )
  .attr("src","image/thumb"+imgN+".jpg");
 }, 
 function () {
   $("#mainRight_PubSpot").find("img:last").remove();
 }

);
worked like a charm, no biggies. Until i replaced <imgThumb> with this:

 $.get('gallery.php',
 function(data){
 var obj = jQuery.parseJSON(data); 
 //alert(obj)


 $.each(obj,function(index, value){
   //alert(this);
   var n = index+1;
   //alert(""+n+" "+index);
   var nimg = new Image();
    $(nimg).load(function() {
     $(this).hide();
     /*$("#galImg").css({
      'width':50,
      'height':50
     });*/
     $("#mainLeft_imgHold").append("<imgt imgn="+n+"></imgt>")
     $("#mainLeft_imgHold").find('imgt:last').append(this);
     $(this).fadeIn();
    }).attr({
     src:""+this,
     imgn:""+n,
     id:"imgThumb"
     });
  });
     }
 );

Now the images load without a sweat wahtsoever althought the .hover and .click functions wont work.

Anyone has a hint on to what might be causing all this commotion?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨小沫ゞ 2024-10-20 22:45:58

如果您在页面加载后加载元素(异步等),则需要使用 .live() 方法附加诸如 hoverclick 之类的处理程序。

以下是 API 页面的链接: http://api.jquery.com/live/

请注意.live() 并不支持开箱即用的所有 jQuery 智能侦听器(例如 hover)。您最终可能必须手动实例化 mouseovermouseout

$("imgt").live('mouseover', function(){...

$("imgt").live('mouseout', function(){...

可以通过创建自己的侦听器来解决此问题,但这是另一个问题的另一个答案。

If you are loading elements after pageload (asynchronously, etc.) you need to attach handlers like hover and click with the .live() method.

Here's a link to the API page: http://api.jquery.com/live/

Note that .live() doesn't support all of jQuery's smarter listeners (like hover) out of the box. You may end up having to instantiate the mouseover and mouseout manually:

$("imgt").live('mouseover', function(){...

$("imgt").live('mouseout', function(){...

There are ways around this by creating your own listeners, but that's another answer for another question.

输什么也不输骨气 2024-10-20 22:45:58

它失败的原因是,当您使用 Javascript 将新项目添加到页面时,DOM 会发生变化,并且需要重新渲染 Javascript。

http://api.jquery.com/live/ 可以为您解决此问题,或者您可以尝试实现您自己的方法,使用 .change() 处理程序检查 DOM 是否已更改。

The reason it fails is because when you add new items to a page with Javascript, the DOM changes and the Javascript needs to be re-rendered.

http://api.jquery.com/live/ can fix this for you, or you can try implementing your own method of checking if the DOM has changed with .change() handler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文