Размытие jQuery () и селектор - PullRequest
0 голосов
/ 27 марта 2010

Я пытаюсь создать новый 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>

Ответил: Спасибо, Ник! Ваш ответ сработал. Я пытался отметить ваш пост как ответ, но он не работает. Не знаю почему:)

Ответы [ 2 ]

4 голосов
/ 27 марта 2010

Вы можете сделать это вместо этого (требуется jQuery 1.4+, в противном случае blur пузырь не обрабатывается):

$(function() { 
  $(':text:last').live('blur', function() { 
    $('#lineStack').append('<div class="line"><span>data: </span><input type="text"/></div>'); 
  }); 
});

Ваш текущий селектор получает элемент и присоединяет событие к этому элементу (другие еще не существуют, поэтому это :last). То, что вы хотите сделать, это иметь огонь размытия независимо от того, когда элемент был добавлен, если он последний, .live() будет обрабатывать это. Смотрите здесь рабочий пример .

1 голос
/ 27 марта 2010

Селектор оценивается только при назначении события. Попробуйте что-то вроде

$(function() {
    $(':text').live("blur", function() {
        if ($(this).is(':last')){
            $('<div class="line"><span>data: </span><input type="text"/></div>').appendTo('#lineStack');
        }
    }); 
});

Таким образом, каждый: текст получает событие (мы используем функцию live , чтобы убедиться, что оно автоматически назначается новым элементам при их создании), но мы используем is функция, чтобы убедиться, что выбранный был действительно последним.

(Я также избавился от избыточного вызова $ в appendTo. Функции jQuery, такие как appendTo, могут принимать строку селектора в качестве параметра.)

...