jquery click事件只能运行一次

时间:2013-08-06 14:40:51

标签: jquery jquery-click-event

我整个上午一直在研究这个问题并且遗漏了一些东西。

以下是基本设置和代码:

<script  src="/mwebphoto/js/jquery-2.0.3.js"></script>

<div id="slideshow">
</div>

</head>
<body>

<ul id="gallery_id">
 <li id="newYork">New York</li>
 <li id="disconnection">Disconnexion</li>
 <li id="jackAtSea">Jack at Sea</li>
</ul>
<script>

  $(document).ready(function () {

      $("#gallery_id li").click(function () {
          var htmlTitle = (this.id);

          $.ajax({
              type: "GET",
              url: "/mwebphoto/xml/albums.xml",
              dataType: "xml",
              success: function (xml) {
                  $(xml).find('album').each(function () {
                      var xmlAlbum = $(this);
                      var xmlTitle = $(this).find('title').text();
                      var xmlEmbedCode = $(this).find('embedCode').text();
                        if (xmlTitle == htmlTitle) 
                          alert(xmlTitle)
                          $("#slideshow").replaceWith(xmlTitle)

                  });
              }
          });
      });

  });
</script>

(注意,我已经根据答案编辑了这个,从这里开始)

我认为问题在于:

if(xmlTitle==htmlTitle) 
  alert(xmlTitle) 
  $("#slideshow").replaceWith(xmlTitle) 

警报工作正常。但是无论我点击哪个列表项,.replaceWith都会在div中放入第二个li(断开连接)。

您可以在此处看到:http://mwebphoto.com/mwebphoto/html/2ndJqueryPage.html

2 个答案:

答案 0 :(得分:2)

$("#gallery_id li").on('click', 'li', function(e) {
       //represents li within li
  });

它应该是

$("#gallery_id li").on('click', function(e) {
       alert(this.id);
  });

$("#gallery_id").on('click','li', function () {
         alert(this.id);
     })

$(document).on('click','#gallery_id li', function () {
         alert(this.id);
     })

试试这个。

更新:

为了显示差异,我创建了

  1. Your Fiddle

  2. Correct Fiddle

  3. 希望你找到差异。

答案 1 :(得分:0)

如果你的html是

<ul id="gallery_id">
   <li>1</li>
   <li>2</li>
</ul>

尝试使用此代码。当事件直接发生在绑定元素上时,不会调用处理程序,但仅适用于与选择器匹配的后代(内部元素)。

 $("#gallery_id").on('click','li', function () {
         // your code
     })