0

每次最后一个 div 中包含的文本字段失去焦点时,我都会尝试创建一个新的 div,但只有当第一个 div 中的文本字段失去焦点(而不是最后一个)时,才会添加一个新的 div。

这是我的代码:

    $(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>

回答:谢谢尼克​​!你的回答奏效了。我一直在尝试将您的帖子标记为答案,但它不起作用。不知道为什么:)

4

2 回答 2

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()将处理它。 有关工作示例,请参见此处

于 2010-03-27T12:57:10.613 回答
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 函数可以将选择器字符串作为参数。)

于 2010-03-27T12:58:22.160 回答