使用php切换图像的Ajax只能工作一次

时间:2017-05-14 17:56:03

标签: php jquery html ajax

我有两个图像是“pin”和“unpin”,我想在做一些数据库后端之后改变点击次数。

当我点击并成像后,它会按预期更改它。但是,当它应该将其更改回另一个图像时,单击新图像不会执行任何操作。

简而言之,这里有html和ajax的东西。我创建了一个具有唯一ID的跨度,因为会有很多。我创建了图像并为其提供了唯一的ID以及数据。数据和唯一ID是数字公司ID。目标是单击图像,获取id并使用相同的id替换为另一个图像。

同样,它在第一次点击时工作正常,但后续点击新图片不会做任何事情。

ajax的东西被加载到页面的头部。

感谢您的期待!!!

这是php / html部分

 if($isfavorite == 0) {
    $id       = "pin_${companyid}";
    $pinit    = "pinit${companyid}";
    $favorite = "<img data-cid='$companyid' id='$id' src='white_pin.png' style='cursor:pointer'>";
 } else {
    $id       = "unpin_${companyid}";
    $pinit    = "pinit${companyid}";
    $favorite = "<img data-cid='$companyid' id='$id' src='white_unpin.png' style='cursor:pointer'>";
 }


    echo "<span id='$pinit' style='float:right;'>$favorite</span>";

我已经简化了代码,但仍然可以获得相同的行为。

   $("[id^='unpin_']").on('click',function(){
      var newimg = 'siteimages/icons/white_pin.png';
      $(this).attr('src', newimg).attr('alt', 'Add').attr('title', 'Add to favorites');
   });


   $("[id^='pin_']").on('click',function(){
      var newimg = 'siteimages/icons/white_unpin.png';
      $(this).attr('src', newimg).attr('alt', 'Remove').attr('title', 'Remve from favorites');
   });

从控制台屏幕截图的附加图像中可以看出,所有内容都按预期工作。问题持续存在,只能翻转一次。

Before After

2 个答案:

答案 0 :(得分:1)

变化:

$('').click(function(){..});

要:

$('').on('click',function(){..});

或使用旧行为(我不知道你的jQ版本):

$('').live('click',function(){..});

详细了解该行为 - 动态DOM元素的事件处理程序jQuery -on

答案 1 :(得分:0)

  

目标是点击图片,获取ID并使用相同的ID替换为其他图片。

创建新图像时,点击处理程序可能会丢失。

执行此操作:在图像容器上设置点击处理程序:

          

像这样:

#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>

class Foo
{
public:
  boost::posix_time::ptime t;
  Foo() : t() {}
};

int main()
{
  Foo foo;
  std::cout << std::boolalpha
            << foo.t.is_not_a_date_time() << '\n';
}

这样,#container中所有带有类别引脚的图像 - 甚至是新的图像 - 将共享相同的点击处理程序,并且由于您没有修改容器,因此点击处理程序不会消失。