0

我想,我已经设置好了,但它仍然无法正常工作 - 我正在添加input带有X删除符号的新 html 元素。如果我点击那个新添加X的标志,新添加的输入应该被删除。我所做的是:

function addmore(){
   $('<input type="file" name="bild[]"/> <a class="del">X</a> <br/>').insertAfter('#more').find('.del').on('click', function(){
   alert('test');
   });
 }

我的html是:

 <a href="javascript:addmore()"> add more </a>
 <p id="more"></p>

它插入得很好,但我无法删除新添加的元素(警报未触发)。为什么是这样?

多谢

4

3 回答 3

2

.find()函数查找当前匹配元素集中的元素,但不包括那些匹配的元素。您的<a class="del">元素是匹配元素集的一部分,因此不会被拾取。

改用.filter()

....filter('.del').on('click', function() {...});
于 2013-03-11T10:16:52.680 回答
1

试试这个

    function addmore(){
        var element = $('<input type="file" name="bild[]"/> <a class="del">X</a> <br/>').insertAfter('#more');
        element.filter(".del").on('click', function(){
        alert('test');
       });
     }
于 2013-03-11T10:15:56.347 回答
1

你的.find()选择器实际上并没有返回任何东西。如果您查看 jQuery 如何处理您的 HTML 字符串:

> $('<input type="file" name="bild[]"/> <a class="del">X</a> <br/>')
[<input type=​"file" name=​"bild[]​">​, #text, <a class=​"del">​X​&lt;/a>​, #text, <br>​]

您将看到它实际上将这些元素和文本节点中的每一个解析为选择器中的单独元素。.find()不会返回任何东西,因为它只会查看这些元素的后代,而不是元素本身:

> $('<input type="file" name="bild[]"/> <a class="del">X</a> <br/>').find('.del')
[]

我会从这样的事情开始:

$('<input type="file" name="bild[]"/>').insertAfter('#more');
$('<a class="del">X</a>').insertAfter('#more').on('click', function(){
    alert('test');
});

$('<br/>').insertAfter('#more');

或者从一开始就创建一个通用选择器来自动处理点击事件,即使对于尚不存在的元素也是如此:

$('#more').on('click', '.del', function() {
    alert('test');
});
于 2013-03-11T10:18:52.573 回答