селектор идентификаторов jquery не работает или выдает предупреждение

#jquery

#jquery

Вопрос:

Я работаю над PHP-приложением, в котором я использую jquery для добавления данных в загрузочный модал. Я пытаюсь использовать селектор jquery, чтобы получить идентификатор тега A, а затем выполнить некоторые действия. У меня возникли проблемы с тем, чтобы заставить селектор выполнять некоторые действия.

Идентификатор #saveScore не выбирается????

Я поместил инструкцию журнала консоли в функцию начального щелчка, чтобы убедиться, что идентификатор находится в DOM. Я получаю результат с помощью этого оператора.

Вот мой код

 $(document).ready(function(){
    $(document).on('click', 'a[data-role=score]', function(){

        var id = $(this).data('id');
        var team_name1 = $('#' id).find('p[data-target=team_name1]').text();
        var team_image1 = $('#team1_image' id).data('image');
        var team_name2 = $('#' id).find('p[data-target=team_name2]').text();
        var team_image2 = $('#team2_image' id).data('image');
        var team1_score = $('#scoreID' id).find('p[data-target=team1_score]').text();
        var team2_score = $('#scoreID' id).find('p[data-target=team2_score]').text();

       
       
        $('#team_name1').html(team_name1);
        $('#team_name2').html(team_name2);
        $('#team_image1').removeClass().addClass("col-4 flag ").addClass(team_image1);
        $('#team_image2').removeClass().addClass("col-4 flag ").addClass(team_image2);
        $('#modal_team1_score').val(Number(team1_score));
        $('#modal_team2_score').val(Number(team2_score));

        $('#scoreModal').modal('toggle');
       
        console.log( $('#saveScore'));
    });

  

    $("#saveScore").click(function(){
        alert('test');
        
        
    });
})  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="modal-footer">
        <button type="button" class="btn btn-secondary " data-dismiss="modal">Close</button>
        <a href="#" id="saveScore" class="btn btn-primary">Update Score</a>
 </div>  

Прямо сейчас я просто пытаюсь получить всплывающее предупреждение, показывающее, что выбран идентификатор #saveScore.

Комментарии:

1. Я не понимаю проблему — ваше оповещение внутри $('#saveScore').click() функции не работает? Мне кажется, что он работает нормально (пока вы включаете jQuery): jsfiddle.net/ud8wthqf

2. вот откуда моя путаница. Кажется, что это должно работать просто отлично. Я также пробовал код в разных браузерах. Кажется, не могу понять, в чем моя проблема.

3. Глупый вопрос, но должен рассказать о своих основаниях …. вы действительно нажали ссылку «Обновить оценку»; к которой подключен прослушиватель событий click? Вы пробовали ссылку jsFiddle в моем другом комментарии? Если да, сработало ли это там? Модальный параметр уже присутствует на странице или он создается «на лету» с помощью jQuery (если «на лету», то, скорее всего, происходит делегирование события — на что, кажется, дан ответ ниже)? И, наконец, какой фактический текст ошибки вы видите в консоли?

4. это сработало в вашей скрипке. Модальный создается при загрузке страницы. У меня есть консоль. инструкция log в первой части метода .on. Это возвращает результат.

5. Мне было бы любопытно, как, вероятно, первому ответчику, узнать, сработает ли для вас замена $('#saveScore').click(function() { alert('test'); }); на $(document).on('click', '#saveScore', function() { alert('test'); }); . Судя по вашим комментариям, этого не должно быть, поскольку #saveScore элемент существует до того, как к нему подключен прослушиватель щелчков, но не помешает убедиться, что проблема не в этом. Я не вижу никаких других проблем с кодом — скрипка буквально является копией вашего опубликованного HTML и вашего опубликованного JS с помощью jQuery (edge) (я тоже пробовал с 3.3.1 явно, и все по-прежнему работало нормально).

Ответ №1:

Наличие остальной части вашего кода помогло устранить проблему — поэтому спасибо за загрузку кода, необходимого для воспроизведения проблемы.

Проблема, похоже, в том, что он .modal-footer находится за пределами .modal-content элемента. Он должен быть вложен внутрь. Это действительно легко пропустить.

Вот первый пример из документации Bootstrap 4.0 для модального:

 <div class="modal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">amp;times;</span>
        </button>
      </div>
      <div class="modal-body">
        <p>Modal body text goes here.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary">Save changes</button>
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>
  

Вы заметите, что все три раздела модального содержимого ( .modal-header , .modal-body и .modal-footer ) вложены в .modal-content элемент. Если я просто открою DevTools на вашем сайте и перетащу .modal-footer элемент внутрь .modal-content элемента сразу после .modal-body , кажется, что он действует так, как требуется.

Моим первым тестом было просто открытие консоли и выдача $('#saveScore').trigger("click"); , которая выдала предупреждение, как и предполагалось, поэтому оказалось, что пользователь не смог нажать кнопку — затем я использовал inspect element и навел курсор на кнопку, но все, что выбирал Chrome, было фоном, который создает модал; кажется, что фон находится перед (по z-индексу) .modal-footer , если он находится за пределами .modal-content .

Надеюсь, это поможет!

Комментарии:

1. Я удалил свой модальный файл и скопировал новый с веб-сайта bootstrap. Внес изменения в идентификатор, и теперь я могу оповещать, нажав кнопку обновить. Спасибо.

Ответ №2:

Я не могу добавить комментарий, поэтому я добавлю answar здесь..

Я полагаю, вы добавляете динамический контент на страницу, чтобы происходило делегирование событий, вы можете попробовать это

 $(document).on("click" , "#saveScore" , function(){
    /*   write your code here*/
   alert('test');

});
  

для получения дополнительной информации перейдите по этой ссылке

Комментарии:

1. У меня уже установлен второй параметр «a [data-role = оценка]» . Я просто попытался сделать его «#saveScore» в качестве третьего параметра. Не получается. Но возможен ли такой вариант?

2. при изменении содержимого страницы события не привязываются к элементам. итак, вам нужно будет выполнить поиск в документе нужного элемента и прикрепить событие, попробуйте приведенный выше код и посмотрите, что произойдет. единственный случай, когда jquary не может найти элемент, если один из трех (элемента нет в документе) или jquary не включен, или вы добавили элемент на страницу после завершения загрузки jquary на странице

3. Я полагаю, что идентификатор saveScore устанавливается при загрузке страницы. У меня модальный режим создан при начальной настройке до добавления любого динамического содержимого.