Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   В IE несколько раз вызывается обработчик click (https://javascript.ru/forum/jquery/32099-v-ie-neskolko-raz-vyzyvaetsya-obrabotchik-click.html)

Douglas 03.10.2012 13:13

В IE несколько раз вызывается обработчик click
 
Проблема немного похожа на эту http://javascript.ru/forum/jquery/98...kolko-raz.html , только метода live в коде нет.
Код такой:
var $jq=jQuery.noConflict();
$jq(function() {
	var popupWindowCloseHandler = function(event) {
		event.preventDefault();
		$jq('body').children('.popup-window-shadow').fadeOut('fast').remove();
		$jq('body').children('.popup-window-box').fadeOut('fast').remove();
	};

	var popupWindow = function(url) {
		var box = $jq(document.createElement('div'));
		box.addClass('popup-window-box');
		var shadow = $jq(document.createElement('div')).appendTo('body');
		shadow.addClass('popup-window-shadow')
			.append('<span></span>')
			.fadeIn('fast')
			.click(popupWindowCloseHandler);
		$jq.ajax({
			url: url,
			contentType: "text/html; charset=windows-1251",
			success: function(html) {
				box.append(html).appendTo('body');
				box.fadeIn('fast')
					.css('margin-left', '-'+ (box.width() / 2) +'px')
					.find('.popup-window-close')
						.click(popupWindowCloseHandler);
alert(1);

		         my_top = ($jq(document).scrollTop() + (($jq(window).height() - box.height()) / 2));
		         if (my_top<0) {my_top = 0;}
		         my_top += 'px';
			     box.css('top', my_top);
			}
		});
	};
	
	$jq('.popup-window').click(function(event) {
		event.preventDefault();
		popupWindow(this.href);
	});
});

Соответственно, при нажатии на ссылку класса popup-window создается "тень" во всю страницу, затем сверху показывается окно.
Проблема в том, что если это окно закрыть (кликом по "тени"), а затем нажать ссылку еще раз, каким-то образом снова вызываются все предыдущие экземпляры popupWindow. Это видно по alert'у, а дебаггер их не замечает. Это происходит в IE, а в других браузерах, похоже, нет.
В чем может быть дело?

antonM 03.10.2012 23:07

У меня не получилось воспроизвести вашу ошибку в ИЕ9 и ИЕ8: http://jsbin.com/uvaqoh/1/
Видимо проблема не в данном участке кода.


Часовой пояс GMT +3, время: 15:13.