В старые времена я с большим успехом использовал цепочку вызовов live()
, например:
$(".something")
.live("click", function(e) { ... })
.live("change", function(e) { ... })
.live("submit", function(e) { ... });
В эти дни live()
, bind()
и delegate()
были заменены блестящим новым on()
.
Я попробовал просто заменить live()
на on()
, что казалось бы очевидным:
$(".something")
.on("click", function(e) { ... })
.on("change", function(e) { ... })
.on("submit", function(e) { ... });
Однако почти так же очевидно, что это не сработает, если вы рассмотрите, как работает on()
. Это из http://api.jquery.com/on/:
"Обработчики событий привязаны только к текущим выбранным элементам, они должны существовать на странице в момент, когда ваш код выполняет вызов .on()."
В соответствии с документами jQuery мне нужно привязать к document
и делегировать на .something
для обработки прямых событий. К сожалению, это означает, что я в конечном итоге повторяю свой селектор делегатов (.document
), если я хочу реплицировать то, что у меня выше, с помощью on()
:
$(document)
.on("click", ".something", function(e) { ... })
.on("change", ".something", function(e) { ... })
.on("submit", ".something", function(e) { ... });
Это работает так, как ожидалось, но мне очень хотелось бы иметь возможность цепочки более четко, как я, используя live()
. Я что-то пропустил?