Перемещение live () из jquery 1.4 в jquery 1.11

0

У меня есть следующий код:

    $(".watermark").live('focus', function() {
        $tb = $(this);
        if ($tb.val() == this.title) {
            $tb.val("");
            $tb.removeClass("water");
        }
    }).live('blur', function() {
    ...
    }
    }).blur();

Как я могу обновить/переписать этот код, чтобы воспользоваться последними функциями jQuery?

Здесь мой jsfiddle http://jsfiddle.net/6EKVV/

Теги:

2 ответа

1
Лучший ответ

Поскольку .live() устарел с версии 1.7 и удален в версии 1.9. Вместо этого вы можете использовать .on():

$(".water").addClass('watermark');
$(".watermark").on('focus', function() {
    $tb = $(this);
    if ($tb.val() == this.title) {
        $tb.val("");
        $tb.removeClass("water");
    }
}).on('blur', function() {
    $tb = $(this);
    if ($.trim($tb.val()) == "") {
        $tb.val(this.title);
        $tb.addClass("water");
    }
}).blur();
  • 0
    Благодарю. Какие еще улучшения кода вы можете предложить?
  • 0
    Вы также можете использовать атрибут- placeholder следующим образом: jsfiddle.net/6EKVV/2
Показать ещё 5 комментариев
2

Вы должны делегировать событие на родительский элемент .watermark.

Подобно:

$(document).on('focus', '.watermark', function() {
  //...
});

$(".watermark").live('focus', callback) равен $(document).on('focus', '.watermark', callback).

$(".watermark").on('focus', callback) просто равен $(".watermark").focus(callback), который является не то, что .live раньше.

  • 0
    Можете ли вы показать пример, пожалуйста
  • 0
    Избегайте использования делегирования событий, когда в этом нет необходимости, особенно в случае с OP.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню