TOC
Need to learn JavaScript? jQuery is a JavaScript framework, so if you don't already know about the JavaScript programming language, we recommend that you learn it now: Learn JavaScript

This article has been localized into Russian by the community.

События:

Метод live()

В предыдущих главах мы использовали методы bind() и unbind(), чтобы привязывать и отвязывать обработчики событий к различным элементам на странице. Это отлично работает для уже существующих элементов, но что если вы хотите обработчик сработал и для тех элементов, которые вы создадите в будущем? Обычно это приходится делать вручную, путем создания новых элементов, и так тоже можно. Однако, используя метод live(), вы сообщаете jQuery, что нужно привязать обработчик и ко всем будущим элементам, которые будут соответствовать исходному селектору, даже не пошевелив для этого пальцем. Позвольте сначала показать пример, в котором мы используем метод bind(), и затем заменить его на live(), чтобы продемонстрировать разницу:

<div id="divTestArea1">
	<a href="javascript:void(0);" onclick="AddBox();">Add box</a>
	<div class="test">This is a box</div>
</div>

<script type="text/javascript">
$(function()
{
	$(".test").bind("mouseover", function()
	{
		$(this).css("background-color", "blue");
	}).bind("mouseout", function()
	{
		$(this).css("background-color", "white");
	});
});

function AddBox()
{
	var div = $("<div></div>").addClass("test").text("Another box");
	$("#divTestArea1").append(div);
}
</script>

Возможно, этот пример покажется вам немного сложным, но на самом деле это не так. Давайте разберем его по шагам. У нас есть ссылка, которая вызывает JavaScript-метод AddBox(), а затем идет div с классом "test". Метод AddBox() просто добавляет на страницу еще один div с тем же классом, так что, когда вы кликаете по ссылке, вы получаете еще один контейнер на странице. В событии ready мы выбираем все элементы с классом "test", а затем привязываем обработчики к двум событиям: mouseover и mouseout, чтобы изменить цвет элемента при наведении на него мыши. Запустите этот пример в своем браузере. Первый div получил эффект наведения мыши, но если, покликав на ссылку, вы добавите больше div-ов, у них этого эффекта не будет. Причина довольно очевидна: мы выполнили привязку события до того, как эти div-ы были созданы.

Теперь попробуйте запустить следующий пример. Я изменил в нем всего два слова: два вызова bind() на два вызова live():

<div id="divTestArea2">
	<a href="javascript:void(0);" onclick="AddBox();">Add box</a>
	<div class="test">This is a box</div>
</div>

<script type="text/javascript">
$(function()
{
	$(".test").live("mouseover", function()
	{
		$(this).css("background-color", "blue");
	}).live("mouseout", function()
	{
		$(this).css("background-color", "white");
	});
});

function AddBox()
{
	var div = $("<div></div>").addClass("test").text("Another box");
	$("#divTestArea2").append(div);
}
</script>

Теперь, запустив этот пример, вы увидите, что хотя мы добавили новые элементы после загрузки страницы, jQuery автоматически добавил к ним обработчики событий. Метод live() работает аналогично bind() во всех остольных отношениях, так что вы можете вернуться к предыдущим главам за более подробной информацией. То же самое справедливо и для метода die(), который работает точно как unbind(), но для случаев, когда вы используете live().


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!