Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.07.2014, 04:47
Новичок на форуме
Отправить личное сообщение для ng-design Посмотреть профиль Найти все сообщения от ng-design
 
Регистрация: 14.07.2014
Сообщений: 6

.on('change', function(){}) - Дублируется исполнение функции
Доброго времени суток, уважаемые. Если тему не так выбрал - прошу прощения. Мой первый пост. Особо никогда не спрашивал за 5 лет ничего, но сейчас нужна Ваша помощь.

Я весь код не буду кидать, только тот, что немного "глючит"
$('#NGFormInput_image').on('change', function(){
  alert(1);
});


Каждый раз выполняется на 1 раз больше, т.е. циклом. В первый раз отлично, во второй раз 2 раза вылетает алерт, в третий раз 3 и т.д.

Уточню, что делаю псевдо инпут для загрузки файлов. Перед onchange вызывается триггер клика по инпуту (он скрыт). Всё срабатывает отлично, но каждый раз (без перезагрузки странички) исполняется (после выбора файлика) на 1 раз больше.

Вот как-то так..

P.S. #NGFormInput_image - это и есть скрытый инпут
Ответить с цитированием
  #2 (permalink)  
Старый 14.07.2014, 04:59
Новичок на форуме
Отправить личное сообщение для ng-design Посмотреть профиль Найти все сообщения от ng-design
 
Регистрация: 14.07.2014
Сообщений: 6

Сделал сейчас некий костыль (ибо к спеху), но всё-же буду ждать дельного совета по данной теме.

Кому интересно:

var Executed = false;
$('#NGFormInput_' + PFileName).on('change', function(){
    if (!Executed) {
      alert(1);
      Executed = true;
    }
  });


Думаю ясно, что к чему :-) Тапками не кидайте, зато работает
Ответить с цитированием
  #3 (permalink)  
Старый 14.07.2014, 09:32
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Может просто событие вешается снова после какого-то действия? Полный код в студию.
Ответить с цитированием
  #4 (permalink)  
Старый 14.07.2014, 15:06
Новичок на форуме
Отправить личное сообщение для ng-design Посмотреть профиль Найти все сообщения от ng-design
 
Регистрация: 14.07.2014
Сообщений: 6

$('.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;
            }
          });
      });


Вот, код без изменений. Больше нигде ничего не используется для элемента.
Ответить с цитированием
  #5 (permalink)  
Старый 14.07.2014, 15:14
Интересующийся
Отправить личное сообщение для feoalter7 Посмотреть профиль Найти все сообщения от feoalter7
 
Регистрация: 28.09.2012
Сообщений: 19

Почти аналогичный вопрос:
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, не помогает..подскажите плиз
Ответить с цитированием
  #6 (permalink)  
Старый 14.07.2014, 15:34
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

У вас событие вешается по новой после каждого клика по кнопке.
Ответить с цитированием
  #7 (permalink)  
Старый 14.07.2014, 15:39
Новичок на форуме
Отправить личное сообщение для ng-design Посмотреть профиль Найти все сообщения от ng-design
 
Регистрация: 14.07.2014
Сообщений: 6

Хм, а каково может быть решение?
Ответить с цитированием
  #8 (permalink)  
Старый 14.07.2014, 15:42
Интересующийся
Отправить личное сообщение для feoalter7 Посмотреть профиль Найти все сообщения от feoalter7
 
Регистрация: 28.09.2012
Сообщений: 19

WorM32,
в этом то и проблема что не по новой, а новое событие добавляется к старым...тоже думал над тем, чтобы внешнюю переменную завести, так как-то костыльно получается, поэтому обращаюсь за помощью
Ответить с цитированием
  #9 (permalink)  
Старый 14.07.2014, 15:44
Интересующийся
Отправить личное сообщение для feoalter7 Посмотреть профиль Найти все сообщения от feoalter7
 
Регистрация: 28.09.2012
Сообщений: 19

ng-design,
в JQ не уверен что будет правильно, а я для себя на чистом JS думаю создать функцию которая будет добавлять в объект событие, в этом объекте будут лежать все события и функции по событию в виде ассоциативного массива, а вызывать их при необходимости, ту или инную
Ответить с цитированием
  #10 (permalink)  
Старый 14.07.2014, 15:44
Новичок на форуме
Отправить личное сообщение для ng-design Посмотреть профиль Найти все сообщения от ng-design
 
Регистрация: 14.07.2014
Сообщений: 6

Я думал мне ответили. Эх) Пойду дружить со своим костылём)
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хитросплетения Global,контекст,this,Reference kefi Общие вопросы Javascript 109 20.11.2009 23:34
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
Модуль для работы с геометрией окна JSprog Библиотеки/Тулкиты/Фреймворки 25 31.08.2009 12:54
Помогите исправить скрипт по поиску в базе данных dok_sj2 Internet Explorer 2 29.06.2009 20:04
function lock (permitted execution) forker Общие вопросы Javascript 2 15.01.2009 19:24