Я бы сказал, что это один из ярких драгоценных камней jQuery, эти обработчики событий для динамически создаваемых элементов HTML. Это совершенно правильная тема, но я все еще хотел бы, чтобы у нас была, например, четверть для всех, кто спрашивал, почему обработчики событий не работают с динамически создаваемыми элементами HTML. : D
И в каждом таком вопросе я бы сказал, что вы используете .delegate()
вместо .live()
, тем более что (по крайней мере, в вашем примере кода) вы знаете точно с самого начала Вы вставляете свои элементы.
$('#ak').delegate('.deletable', 'click', function (e) {
// do something
});
Нет смысла переходить на .live()
и вызывать глобальный обработчик в глобальном контексте.
Если вы серьезно не хотите идти по пути live / delegate
, вы всегда можете включить свои обработчики при создании элемента.
// creating a button with a click event handler
$('<button/>', {
id : 'foo',
class : 'deletable',
click : function (e) {
// do something
}
});
... тогда вы можете использовать это и добавить это куда-нибудь. Вы можете обнаружить, что этот подход, будучи интегрированным в ваш код, может быть более жизнеспособным для вас.