jQuery blur()和selector

时间:2010-03-27 12:52:10

标签: jquery blur

每次包含在最后一个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>

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

2 个答案:

答案 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函数可以将选择器字符串作为参数。)