每次包含在最后一个div中的文本字段失去焦点时,我都会尝试创建一个新的div,但只有当第一个div中的文本字段失去焦点(而不是最后一个)时才会添加新的div。 / p>
这是我的代码:
$(function() {
$(':text:last').blur(function() {
$('<div class="line"><span>data: </span><input type="text"/></div>')
.appendTo($('#lineStack'));
});
});
HTML:
<div id="lineStack">
<div class="line">
<span>data: </span><input type="text" />
</div>
</div>
回答:谢谢尼克!你的答案奏效了。我一直试图将你的帖子标记为答案,但它不起作用。不知道为什么:)
答案 0 :(得分:4)
您可以这样做(需要jQuery 1.4+,否则不会处理blur
气泡):
$(function() {
$(':text:last').live('blur', function() {
$('#lineStack').append('<div class="line"><span>data: </span><input type="text"/></div>');
});
});
您当前的选择器会获取一个元素并将事件附加到那个元素(其他元素尚不存在,因此它是:last
)。你要做的就是模糊火焰,无论元素被添加到底是什么时候,.live()
都会处理它。 See here for a working example
答案 1 :(得分:1)
仅在分配事件时评估选择器。尝试像
这样的东西$(function() {
$(':text').live("blur", function() {
if ($(this).is(':last')){
$('<div class="line"><span>data: </span><input type="text"/></div>').appendTo('#lineStack');
}
});
});
这样,每个:text都会获取事件(我们使用live函数来确保它们在创建时自动分配给新元素),但我们使用is函数来确保选中的那个真的是最后一个。
(我还删除了appendTo中的冗余$
调用。如appendTo这样的jQuery函数可以将选择器字符串作为参数。)