1

我在单击按钮时删除附加的 div 时遇到了一些问题。

当我使用 hide() 时,我在美学上得到了正确的行为,但它实际上并没有删除我想要的新 div,因为这些数据将被发送到 web 服务。

查询:

$('a.addListOVM').click(function(e){    
    e.preventDefault();         
    $('.addCardOVM').append('<div class="divform"><label>' + $('.my_select').find(':selected').val() + '</label>' + '<a class="removed" href="">-</a></div>');

    $('.removed').click(function(e){            
        e.preventDefault();
        $(this).closest('.divform').hide();
    });                     
});

模板 HTML:

<div class="divform">
 <select class="my_select" name="vlans_{$NetworkDTO->id}[]">
  {foreach from=$arrNetworkDTO item=NetworkDTO name=arr}
    <option class="addOvmCardList" value="{$NetworkDTO->name|escape}">{$NetworkDTO->name}</option>
  {/foreach}
 </select>
<a href="" class="addListOVM">+</a> 
</div>

按钮本身是动态生成的(参见第 3 行)并且在单击时,我希望它在不关闭整个窗口的情况下删除特定的附加 div,当我使用.remove()而不是hide().

那么,谁能告诉我:

  1. 为什么使用 remove() 而不是 hide() 会关闭我的整个模板窗口而不是删除那个单独的 div,就像 hide() 看起来一样。

  2. 为什么,当我创建了附加 div 的多个实例时,.removed click 处理程序是否会被多次调用(如果您创建两个实例,删除一个循环一次,删除第二个循环两次等)

  3. 如何在实际删除附加的 div 时获得 hide() 的物理功能?

谢谢

4

2 回答 2

4

1. 为什么使用 remove() 而不是 hide() 会关闭我的整个模板窗口而不是删除那个单独的 div,就像 hide() 看起来一样。

我不知道您所说的模板窗口是什么意思,所以我在这里无法提供帮助。

2.为什么,当我创建了附加 div 的多个实例时,.removed click 处理程序会被多次调用(如果创建两个实例,删除一个循环一次,删除第二个循环两次等)

因为每当执行 click 事件处理程序并创建一个新的div时,都会将一个新的事件处理程序绑定到所有.removed元素,包括刚刚创建的元素和所有其他现有元素。

3. 如何在实际删除附加的 div 的同时获得 hide() 的物理功能?

可能和上面的问题有关。对删除 的事件处理程序使用事件委托div

$('a.addListOVM').click(function(e){    
    e.preventDefault();         
    $('.addCardOVM').append('<div class="divform"><label>' + $('.my_select').find(':selected').val() + '</label>' + '<a class="removed" href="">-</a></div>');                 
});

$('.addCardOVM').on('click', '.removed', function(e){            
    e.preventDefault();
    $(this).closest('.divform').remove();
});    
于 2013-01-09T16:40:27.320 回答
0

使用 jQuery Live 函数来选择动态添加的 HTML。

 $('.removed').live('click',function(e){            
    e.preventDefault();
    $(this).closest('.divform').hide();
});  
于 2013-01-09T16:41:37.600 回答