0

这是我的测试用例:

<!DOCTYPE html>
<html>
  <head>
    <script src="http://code.jquery.com/jquery-2.0.2.js"></script>
    <script type="text/javascript">

    $(document).ready(function()
    {
      $('.sequence').on('click', function()
      {
        e = $(this).next(); // div element, DOM element
        e.html(Math.random());

        e.on('click', function()
        {       
          e.html(Math.random());
        });

      });
    });
    </script>
  </head>
  <body>

    <div class="sequence">Sequence 1</div>
    <div>1</div>

    <div class="sequence">Sequence 2</div>
    <div>2</div>

  </body>
</html>

上层代码可以在http://jsfiddle.net/3LrXZ上测试。

当我单击 div Sequence 1时,第一个具有文本“1”的下一个 div 会获得一些随机值,让我们说 0.3126203578431159。然后我点击 div Sequence 2,下一个 div 最初的值为 '2' 得到一些随机值,比如 0.16280379495583475。到现在为止一切正常。现在,当我单击第一个 0.3126203578431159 时,第二个 div 0.16280379495583475 会更改值。元素 0.312620357843115 应该改变值(获得新的随机数,而不是第二个)。

这是否意味着您不能在 DOM 元素上绑定事件,只能在 html 元素 id、类、其他属性上绑定事件?不是每个 DOM 元素也都有一些可以使用的 ID。

4

2 回答 2

7

范围问题。您的 undeclarede成为两个处理程序之间共享的全局。要解决这个问题:

var e = $(this).next();

e这将在每个序列的处理程序中具有唯一性。

Demo

于 2013-06-11T11:51:23.453 回答
1
  var e = $(this).next(); // div element, DOM element
      e.html(Math.random());          

      e.on('click', function ()
      {
          $(this).html(Math.random());
      });

http://jsfiddle.net/59HgA/

于 2013-06-11T11:52:40.930 回答