Поскольку вы вызываете Windows.prototype.moveOnTop
каждый раз, когда добавляется новое окно, обработчики click
будут складываться для ранее созданных окон. Например. после создания n
окон первое окно будет иметь обработчики n
, второе - n-1
и так далее.
Поскольку getZindex
выглядит хорошо для меня, вполне возможно, что это источник вашей проблемы. Или нет, но это то, что вы все равно хотите исправить. И исправить это легко:
$(document).on('click', '.window', function() {
var thisWindow = $(this);
Windows.prototype.getZindex(thisWindow);
});
Таким образом, окно еще не должно существовать при инициализации приложения. Это называется делегирование события , и это означает, что событие будет всплывать до document
, который будет смотреть, соответствует ли выбранный элемент селектору ('.window'
), и вызывать обработчик, если это так.
Как уже отмечал Роберт , ваши имена функций немного странные. Вы не показали нам остальную часть Windows
, но она явно не связана с DOM. Исходя из этой догадки, я думаю, что это может быть более подходящим:
Удалить Windows.prototype.moveOnTop
.
Переименуйте getZindex
в более точное описательное имя, например ::
Windows.prototype.moveToTop = function(thisWindow){
var boxes = $('.window');
var maxZindex = 0;
boxes.each(function() {
var zIndex = parseInt($(this).css('z-index'), 10);
maxZindex = Math.max(maxZindex, zIndex);
});
thisWindow.css("z-index", maxZindex + 1);
}
Куда бы вы ни инициализировали свое приложение, добавьте следующее:
var container = '#appContainer'; // <-- the container the app is rendered into
$(container).on('click', '.window', function() {
var thisWindow = $(this);
Windows.prototype.moveToTop(thisWindow);
});
Дайте нам знать, если это решит вашу проблему.