1

我对唯一元素 ID 有疑问?

我在这里做错了什么?

http://jsfiddle.net/KRRES/

HTML:

<div id='gmapItemHolder'></div>

<button id='btnCreateMarker'>Add</button>

查询:

$("#btnCreateMarker").click(function () {
    i = 1;
    var gmapItemsHolder = "gmapItems" + i++;

    $('<ul>' + '</ul>')
        .attr({id: gmapItemsHolder, class: 'gmapUlHolder row-fluid'}).prependTo('#gmapItemHolder')
}); 

更新:

发生的事情是所有新创建的 ul 都获得了 ID 1

4

3 回答 3

2

的范围i是本地的,因此它不会在点击之间保留状态。增加范围i,使其在事件之间保留。

  var i = 1;
  $("#btnCreateMarker").click(function () {

      var gmapItemsHolder = "gmapItems" + i++;

      $('<ul>'
         + '</ul>'
         ).attr({id: gmapItemsHolder, class: 'gmapUlHolder row-fluid'}).prependTo('#gmapItemHolder')
  }); 
于 2013-05-16T08:41:55.547 回答
1

正如凯文所说,问题在于i每次都被使用和丢弃。

不要像他建议的那样创建全局变量。相反,将代码包装在一个作用域函数中并在那里定义它:

(function() {
  var i = 1;
  $("#btnCreateMarker").click(function () {

      var gmapItemsHolder = "gmapItems" + i++;

      $('<ul>'
         + '</ul>'
         ).attr({id: gmapItemsHolder, class: 'gmapUlHolder row-fluid'}).prependTo('#gmapItemHolder')
  }); 
})();

这样,i对事件处理程序的所有调用共享click,但它不是全局变量。

于 2013-05-16T08:45:08.250 回答
0

尝试这个:

var i =jQuery("#gmapItemHolder").children().length + 1;
var gmapItemsHolder = "gmapItems" + i;

代替:

i = 1;
var gmapItemsHolder = "gmapItems" + i++;
于 2013-05-16T09:09:29.760 回答