Я собираюсь предположить, что вы хотите, чтобы событие вызывалось только один раз, когда элемент соответствовал PER, а не полностью отменял привязку при первом щелчке.
Я бы реализовал это так:
$('#container').delegate('.children', 'click', function() {
if($(this).data('clicked')) {
return;
}
// ... your code here ...
$(this).data('clicked', true);
});
Это будет срабатывать только один раз за элемент. Технически, он срабатывает каждый раз, но помечается при первом нажатии, чтобы код больше не выполнялся.
Внутренняя проблема моделирования обработчика .one () с делегатом заключается в том, что при использовании .one () каждый элемент, который был сопоставлен в селекторе, связывается со своим собственным обработчиком событий. Поэтому, когда он запускается впервые, он освобождает / удаляет обработчик из этого элемента. Вы не можете сделать это с помощью .delegate (), потому что для ВСЕХ соответствующих элементов используется только ОДИН обработчик.
Хотя приведенный выше код полностью имитирует его, он все же несколько хакерский, потому что он буквально не делает того же, что и .one () (отменяет привязку обработчика события).