Оно работает! Но, блин, как..

На днях исправлял чудесный, феерический баг в коде, уже успевшем стать древним (просто потому, что мой склероз прогрессирует заметно быстрее,
чем я пишу код). Вкратце, берётся инпут, обвешивается несколькими способами обработчиками, после чего в инпут вводится значение и..
и обработчики не работают!

Через минут двадцать я обнаруживаю, что $(искомый инпут).data() - девственно пуст. Ещё получаса мне хватило на то, чтобы додуматься почесать
скрипт grep-ом. И опаньки! В тот момент, когда инпут получает фокус я делаю (барабанная дробь) .unbind без параметров. (Старательно выношу матершинные слюни за скобки).

Никогда так не делайте - focus.js
$("input.dummy_data").focus(function() {
$(this).
val("").
removeClass("dummy_data").
unbind(); // Вот в этом месте все обработчики дружно собираются и уходят курить
});

Мораль сей басни - учите, господа, матчасть. В своё время я использовал .unbind чтобы второй раз не вызывать обработчик по событию .focus.
И хотя самостоятельно отрубать себе же руки (хэндлы) я в виду не имел, но очень даже это сделал.

P.S.

Правильный вариант обработчика - focus.js
$("input.dummy_data").bind("focus.placeholder", {
var $this = $(this);

// Очищаем значение, как и планировалось
$this.val("");

// Убираем стиль, чтобы снять оформление
$this.removeClass("dummy_data");

// Аккуратно убираем обработчик события, не трогая остальные
$this.unbind("focus.placeholder");
});