JavaScript的后期绑定(bind)很棒。但是我想怎么早绑定(bind)呢?

我正在使用jQuery在div循环中添加带有事件处理程序的链接。变量“aTag”在循环中更改。当我稍后单击链接时,所有链接都会提示相同的消息,这是'aTag'的最后一个值。如何将其他警报消息绑定(bind)到所有链接?

所有链接应在添加事件处理程序时(而不是在单击事件处理机时)警告“aTag”具有的值。

for (aTag in tagList) {
  if (tagList.hasOwnProperty(aTag)) {
    nextTag = $('<a href="#"></a>');
    nextTag.text(aTag);
    nextTag.click(function() { alert(aTag); });
    $('#mydiv').append(nextTag);
    $('#mydiv').append(' ');
  }
}

最佳答案

您可以将数据传递给bind方法:

nextTag.bind('click', {aTag: aTag}, function(event) {
    alert(event.data.aTag);
});

这将复制aTag,因此每个事件处理程序将具有不同的值。您的用例正是bind的此参数存在的原因。

完整代码:
for (aTag in tagList) {
  if (tagList.hasOwnProperty(aTag)) {
    nextTag = $('<a href="#"></a>');
    nextTag.text(aTag);
    nextTag.bind('click', {aTag: aTag}, function(event) {
      alert(event.data.aTag);
    });
    $('#mydiv').append(nextTag);
    $('#mydiv').append(' ');
  }
}

08-19 00:44