allishappy
@allishappy

Почему неправильно срабатывает событие?

При нажатии на один из <p class='listFileText'>правой кнопкой появляется меню с функциями "удалить, переименовать и пр.". При нажатии на "переименовать" вместо текста появляется поле<input type="text" id="inputNewName">, в которое вводится текст. И старый текст меняется на новый.

Но если я дважды подряд нажму на <p class='listFileText'>, то ничего не работает. Скорее всего, это из-за того, что браузер запоминает все события, которые на него понавешаны. Пробовал исправить через off и preventDefault(), но не помогло
$(document).off('click', 'li#rename');
   $(document).on('click', 'li#rename', function(event) {
   $(document).off('click');
zamena.replaceWith('<input type="text" id="inputNewName">');
              $('#inputNewName').focus(); //делаем фокусировку вручную, потому что autofocus может быть применён только для одного поля на странице
              $('#inputNewName').attr('value', text);
              $(document).off('click');
              $(document).on('click', function(event) {
                  var newName=document.getElementById('inputNewName').value; //только новое имя
                  event.preventDefault();
                

                  if (identicalName(text)==false && correctName(text)==true) { //имя уникально и корректно
                      $('#inputNewName').replaceWith('<p class="listFileText" id="last"></p>');
                      $('#last').text(text);
                      $('#last').wrap('<div class="child"></div>');
                      $('#last').removeAttr('id');
                  }
                  
              })

             })
};


Как исправить?
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
у P нет смысла preventDefault(), он не А у него нет поведения по умолчанию

zamena и text задаются где то за пределами приведённого кода и соответственно этот код может не работать из за них

обилие on off не ясно, видимо это попытка реагировать на текущие состояние, тогда логичней использовать $().click(function(e){ $(this).attr() // или .addClass() или .data() }) для хранения состояния.

Ну и наконец в приведённом коде нет навешивания событий на listFileText о проблеме с которым вы спрашиваете.

Вы спрашивали про, что то такое https://jsfiddle.net/ywmo1etq/
если ваши появляются динамически то click поменять на on,
обновление в пример на потере фокуса
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Но если я дважды подряд нажму на .listFileText, то ничего не работает.

А чего вы ожидаете? Что по вашему должно происходить?

Зачем вы навешиваете .off()? Вы читали документацию по этому методу?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
Rocket Брянск
от 60 000 до 100 000 ₽
23 мая 2024, в 07:18
10000 руб./за проект
23 мая 2024, в 02:40
5000 руб./за проект
22 мая 2024, в 23:58
15000 руб./за проект