jquery.Event的动态元素

时间:2010-09-12 15:14:35

标签: javascript dynamic elements jquery

我的代码和我的问题是:

<script type="text/javascript">
$(document).ready(function() {
  // this variable is used to set the dynamic elements
  tagFlag = '';

  $("#a1").click(function(event) {
      event.preventDefault();
      tagFlag = 'me';  // setting the element which I want to trigger later
  });

  $('#'+tagFlag).click(function(e) {
      // do sthing here
  });
});

</script>
</head>

<body>
<a href="">make the element</a>
<p id="me">some words here</p>
</body>
</html>

但是。当我设置tagFlag,然后单击“p”时,没有任何事情发生.BTW。当tagFlag被设置为nothing时,会出现错误。所以我可以得到我想要的东西吗?

非常感谢!!

4 个答案:

答案 0 :(得分:0)

也许您应该查看将事件分配给所有现有和未来元素的jQuery live()方法。

http://api.jquery.com/live/

答案 1 :(得分:0)

ID“a1”没有元素。如果您想要第一个锚元素,请使用

$.("a:eq(0)")

而不是。如果不是这样,请报告。

答案 2 :(得分:0)

使用jquery对象并将单击的元素添加到其中:

$(document).ready(function() {
  $tagFlag = $("");

  $("#a1").click(function(event) {
    event.preventDefault();
    $tagFlag.add($(this));
  });

  $tagFlag.click(function(e) {
    // do sthing here
  });

});

答案 3 :(得分:0)

您可以将.click()处理程序附加到document并检查点击的目标是否是您关注的元素,类似于.live()内部的行为,如下所示:

$(function() {
  var tagFlag = '';
  $("#a1").click(function(event) {
      event.preventDefault();
      tagFlag = 'me';
  });
  $(document).click(function(e) { 
    if(tagFlag &&                  //is it even set?
       (e.target.id == tagFlag || $(e.target).closest('#'+tagFlag).length)) {
          //do work here
    }
  });
});

You can give it a try here,对标记的唯一更改是添加子元素(显示单击冒泡/处理工作)并为a1 ID 认为提供锚点>你打算让它出现在问题中。

或者,如果您知道可以单击的元素集,请为它们提供一个类并将处理程序绑定到它们,像上面一样检查ID ...或取消绑定类并每次重新绑定到特定ID,有几种方法可以解决这个问题:)