.on('change', function(){}) - Дублируется исполнение функции
Доброго времени суток, уважаемые. Если тему не так выбрал - прошу прощения. Мой первый пост. Особо никогда не спрашивал за 5 лет ничего, но сейчас нужна Ваша помощь.
Я весь код не буду кидать, только тот, что немного "глючит"
$('#NGFormInput_image').on('change', function(){
alert(1);
});
Каждый раз выполняется на 1 раз больше, т.е. циклом. В первый раз отлично, во второй раз 2 раза вылетает алерт, в третий раз 3 и т.д. Уточню, что делаю псевдо инпут для загрузки файлов. Перед onchange вызывается триггер клика по инпуту (он скрыт). Всё срабатывает отлично, но каждый раз (без перезагрузки странички) исполняется (после выбора файлика) на 1 раз больше. Вот как-то так.. P.S. #NGFormInput_image - это и есть скрытый инпут |
Сделал сейчас некий костыль (ибо к спеху), но всё-же буду ждать дельного совета по данной теме.
Кому интересно:
var Executed = false;
$('#NGFormInput_' + PFileName).on('change', function(){
if (!Executed) {
alert(1);
Executed = true;
}
});
Думаю ясно, что к чему :-) Тапками не кидайте, зато работает :lol: |
Может просто событие вешается снова после какого-то действия? Полный код в студию.
|
$('.ngPseudoFile .button').hover(function(){
$(this).find('.back').stop().fadeTo(300, 1);
}, function(){
$(this).find('.back').stop().fadeTo(500, 0);
})
.click(function(){
var PFile = $(this).parent();
var PFileName = PFile.attr('data-name');
var Executed = false;
$('#NGFormInput_' + PFileName)
.trigger('click')
.on('change', function(){
if (!Executed) {
var FakePath = $(this).val().split('\\');
PFile.find('.text').text(FakePath[FakePath.length - 1]);
Executed = true;
}
});
});
Вот, код без изменений. Больше нигде ничего не используется для элемента. |
Почти аналогичный вопрос:
on_event_handler: function(selector){
document.body.addEventListener('click', function(e){
//if()
var RunBtn = document.querySelectorAll(selector);
for(var i = 0, count = RunBtn.length; i < count; i++){
if(RunBtn[i].addEventListener){
RunBtn[i].addEventListener('click', function(e){
alert(1);
}, false);
}
else if(RunBtn[i].attachEvent){
RunBtn[i].attachEvent('onclick', function(e){
alert(1);
});
}
}
});
}
Аналог метода .on в JQ, но нужно свой, только почему то окон alert(); каждый раз на одно больше. Как то может чистить очередь событий, пробовал removeEventListener, не помогает..подскажите плиз |
У вас событие вешается по новой после каждого клика по кнопке.
|
Хм, а каково может быть решение?
|
WorM32,
в этом то и проблема что не по новой, а новое событие добавляется к старым...тоже думал над тем, чтобы внешнюю переменную завести, так как-то костыльно получается, поэтому обращаюсь за помощью |
ng-design,
в JQ не уверен что будет правильно, а я для себя на чистом JS думаю создать функцию которая будет добавлять в объект событие, в этом объекте будут лежать все события и функции по событию в виде ассоциативного массива, а вызывать их при необходимости, ту или инную |
:cray: Я думал мне ответили. Эх) Пойду дружить со своим костылём)
|
ng-design,
ты же функцию единожды определяешь на странице, а по определенному событию она у тебя отрабатывает, можно и так как есть оставить думаю. |
feoalter7,
Да я тоже так подумал, в принципе. Работает и пусть. Нет времени переписывать или ещё что-то делать, но если кто носом ткнёт в проблемное место и предложит вариант лечения - был бы очень благодарен) |
| Часовой пояс GMT +3, время: 07:45. |