Я изучаю JavaScript, и я застрял, создав функцию, чтобы свести к минимуму окно. Проблема в том, что эти функции, как представляется, складываются в себе столько раз.Наследование вызывает выполнение функции так много раз Javascript
Гир моя главная функция:
function displayChatWindow(user, status, avatar, id){
var template = _.template($("#windowTemplate").html(), {userName: user, userStatus: status, userAvatar: avatar, userId: id});
stackingWidth = stackingWidth - boxWidth;
console.log(stackingWidth);
$("body").prepend(template);
$(".messages-container").slimScroll({
height: '200',
size: '10px',
position: 'right',
color: '#535a61',
alwaysVisible: false,
distance: '0',
railVisible: true,
railColor: '#222',
railOpacity: 0.3,
wheelStep: 10,
disableFadeOut: false,
start: "bottom"
});
$("#" + id).css({
top: absoluteY,
left: stackingWidth
});
$(".minimize-others").on("click", displayOthersChat);
$(".chat input, .chat textarea").on("focus", cleanInputs);
$(".chat input, .chat textarea").on("blur", setInputs);
}
Эта функция принимает несколько параметров и с помощью шаблона создает окно чата. В конце он применяет функцию для минимизации окна (displayOthersChat
) и загружает плагины и прочее для каждого окна.
Моя displayOtherChats
функция:
function displayOthersChat(e){
/*e.preventDefault();*/
var This = $(this).parent().parent();
var minimize = This;
if(!This.hasClass("draggable")){
This.animate({
top: windowHeight - boxHeight - 20
});
This.addClass("draggable");
This.draggable({handle: ".header"});
var timeOut = setTimeout(function() {
This.find(".minimize").toggleClass("rotate");
}, 500);
}else{
This.draggable("destroy");
This.removeClass("draggable");
var timeOut = setTimeout(function() {
This.find(".minimize").toggleClass("rotate");
}, 500);
This.animate({
top: absoluteY
});
}
/*return false;*/
}
Это, кажется, работает очень хорошо. Если я открою свое первое окно, оно отобразит, а также минимизирует работу окна. Когда я открываю другое окно, последнее окно работает правильно, но открывается первое окно, когда я пытаюсь свести его к минимуму.
Кажется, что он вызывает функцию дважды, и если я открою третье окно, первое окно вызывает функцию три раза.
Я действительно не знаю, что происходит, я буду признателен, если вы, ребята, можете мне помочь. Я также оставляю ссылку, чтобы вы, ребята, могли посмотреть, что происходит: http://s3.enigmind.com/jgonzalez/nodeChat.
Что это должен делать с ООП и наследование? Я не вижу никаких конструкторских функций или наследования в любом месте. Создайте демо-версию http://jsfiddle.net/, которая реплицирует проблему. Тогда мы сможем оказать лучшую помощь. –
Ну, на самом деле, я учусь, поэтому я подумал, что это что-то вроде oop или inheritance:/ahahahah –
Так что, я думаю, проблема в том, что вы привязываете один и тот же обработчик событий снова и снова. '$ (". minim-others "). on (" click ", displayOthersChat);' свяжет 'displayOthersChat' со всеми * существующими * элементами с классом' minim-others'. Вы можете только привязать его к только что созданному окну, возможно, 'template.find ('. Minim-others'). On (...)'. То же самое для других функций. –