0

我正在尝试创建一些元素,然后将它们绑定到不同的方法,例如,

for( key in object ){
  var vals = someMap[key];
  var element = jQuery(parentElements[key]).find('.someClass');
  var markup;
  for( someKey in vals ){
      markup += "<a href='#' >" + vals[someKey] + "</a>";
  }
  jQuery(element).empty().html(markup);
  jQuery(element).find('a').bind('click', function(element){ alert(key); });
}

现在运行此代码后,我能够创建所有锚元素,因此警报应该打印创建锚标签的键,例如,如果我有 2 个键 key1 和 key2,那么锚标签是在parentElements[key1] & parentElements[key2],所以每当我点击一个锚标签时,我应该会收到 key1 或 key2 的警报,这取决于我点击了谁的锚标签。但问题是总是 key2 被警告。所以,我认为这里的问题可能是绑定延迟到执行单击,并且当它执行时,key alerted 的值将始终是最后一个键,即 key2。我不太确定这里的问题是什么,但由于它总是最后一个被警告的键,我的印象是绑定发生在最后,当两个循环都完成时。

那么我做错了什么,或者我应该以不同的方式做吗?任何帮助表示赞赏。(也许这个问题不是很容易解释,如果我应该用其他东西替换它,请告诉我)。

4

2 回答 2

0

可能是您正在使用 bind 将事件附加到稍后添加的元素,这就是它不起作用的原因。尝试使用liveon ...

于 2012-06-22T12:23:29.293 回答
0

尝试这个:

for( var key in object ){
  var vals = someMap[key],
      element = jQuery(parentElements[key]).find('.someClass');
  element.empty();
  for( var someKey in vals ) {
      var anchor = jQuery("<a href='#'>" + vals[someKey] + "</a>");
      element.on('click', anchor, function(){ alert(key); }).append(anchor);
  }
}

提示:总是用 var ... in ... 初始化你的 for 循环,否则你到处都有全局变量,这可能会干扰其他循环。

于 2012-06-22T12:32:33.927 回答