代码之家  ›  专栏  ›  技术社区  ›  Vianne

jQuery-从生成的元素动态获取id[重复]

  •  2
  • Vianne  · 技术社区  · 6 年前

    我试图做的是在单击时获取列表中新添加项目的id名称。这是我的密码。

    $(document).ready(function() {
    
      $('ul>li').on('click', function() {
        var idName = $(this).attr('id');
        alert(idName);
      });
    
      $('#add').click(function() {
        var n = Math.floor((Math.random() * 100) + 1);
        $('ul').prepend('<li id="name-' + n + '">New Item</li>');
      });
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <ul>
      <li id="name-88">Old Item</li>
      <li id="name-59">Old Item</li>
      <li id="name-48">Old Item</li>
    </ul>
    <button id="add">Add Item</button>

    JSFiddle

    4 回复  |  直到 6 年前
        1
  •  2
  •   Ankit Agarwal    6 年前

    您需要使用 $(document).on('click', 'ul>li', function(){}); 而不是 $('ul>li').on('click', function() { }); 这是因为您在加载jquery代码后动态添加元素。因此 $('ul>li')。on('click',function(){}); 不会检测到 click 新添加元素上的事件。要解决此问题,需要将click事件分配给 ul>li document 级别,因此每当添加新元素时,它都处于 文件 并倾听 点击 上的事件 ul>李

    $(document).ready(function() {
    
      $(document).on('click', 'ul>li', function() {  
        var idName = $(this).attr('id');
        alert(idName);
      });
    
      $('#add').click(function() {
        var n = Math.floor((Math.random() * 100) + 1);
        $('ul').prepend('<li id="name-' + n + '">New Item</li>');
      });
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul>
      <li id="name-__">New Item</li>
      <li id="name-88">Old Item</li>
      <li id="name-59">Old Item</li>
      <li id="name-48">Old Item</li>
    </ul>
    <button id="add">Add Item</button>
        2
  •  0
  •   BugHunter    6 年前

    要获取新创建项的id,请使用ele:first-CSS属性。 在单击时调用它。

    let new_el_id = $("ul").find("li:first").attr("id");
    
        3
  •  0
  •   Saeed    6 年前

    每次添加新项目时更新您的侦听器,请尝试

    $(document).ready(function() {
      addListener();
    
      function addListener() {
        $('ul li').on('click', function() {
          var idName = $(this).attr('id');
          alert(idName);
        });
      }
    
      $('#add').click(function() {
        var n = Math.floor((Math.random() * 100) + 1);
        $('ul').prepend('<li id="name-' + n + '">New Item</li>');
        addListener();
      });
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <ul>
      //
      <li id="name-__">New Item</li>
      <li id="name-88">Old Item</li>
      <li id="name-59">Old Item</li>
      <li id="name-48">Old Item</li>
    </ul>
    <button id="add">Add Item</button>
        4
  •  0
  •   user3551009    6 年前

    试试这个

    $('ul').on('click','li', function() {  
        var idName = $(this).attr('id');
        alert(idName);
    });