Мой скрипт Ajax не скрывает Bootstrap Modal после отправки

У меня есть страница, на которой отображаются 6 карт начальной загрузки в 3 столбцах. Каждая карточка Bootstrap отображает изображение, имя, описание и кнопку нижнего колонтитула. Когда пользователь нажимает кнопку нижнего колонтитула Bootstrap Card, Bootstrap Modal открывается с данными строки Sql по идентификатору и в этот Bootstrap Modal имеет 2 входа и одну форму textarea, которые описаны ниже:

1. <input type = "text" name = "name" id = "name" class = "form-control" required />

2. <input type = "email" name = "email" id = "email" class = "form-control" required />

3. <textarea class = "form-control" type = "text" name = "message" id = "message" rows = "3"  
required></textarea>

Чтобы открыть Modal с учетом ID, я вставил код PHP в код карточки кнопки, как показано ниже:

<button type = "button"  class = "btn btn-block btn-primary" data-toggle = "modal" 
data-target = "#dataModal<?php echo $record['ID']; ?>">View Details</button>

Где <?php echo $record['ID']; ?> относится к идентификатору строки SQL.

Когда пользователь заполняет форму и нажимает кнопку отправки Modal, все данные отправляются в базу данных, и это нормально, но Bootstrap Modal не скрывается после успеха Ajax.

Сценарий Ajax, который я использую для вставки данных через php-код (insert.php) в базу данных:

<script type = "text/javascript" language = "javascript" >

$(document).on('submit', '#contactForm', function(event){
        event.preventDefault();
    $.ajax({
                url:"insert.php",
                method:'POST',
                data:new FormData(this),
                contentType:false,
                processData:false,
                success:function(data){
                    alert("Message sent!");                 
                    $("#contactForm")[0].reset();
                    $('#dataModal').hide();
                    $(".modal-backdrop").remove();

                }
});
});

</script>

Я думаю, что проблема связана с этой строкой об успехе Ajax: $('#dataModal').hide();, потому что атрибут Bootstrap Modal html id равен "dataModal<?php echo $record['ID']; ?>", а не только «dataModal».

В этом случае, если я поставлю так $('#dataModal<?php echo $record['ID']; ?>').hide();, ничего не произойдет.

Ниже приведен полный код:


<div class = "container">

<?php
include_once("includes/mysqli_connection.php");
$sql = "SELECT * FROM products ORDER BY RAND() LIMIT 6";
$resultset = mysqli_query($conn, $sql) or die("database error:". mysqli_error($conn));
while( $record = mysqli_fetch_assoc($resultset) ) {
?>  

<div class = "card-deck" style = "width: 18rem; display:inline-block; margin:15px;">
  <div class = "card">
  <?php echo '<img src = "upload/'.$record["image"].'" class = "img-thumbnail" width = "286" height = "180" />'; ?>
    <div class = "card-body" align = "center"><h5 class = "card-title"><?php echo $record['ProductName']; ?></h5></div>
    <div class = "card-footer">
      <button type = "button"  class = "btn btn-block btn-primary" data-toggle = "modal" data-target = "#dataModal<?php echo $record['ID']; ?>">View Details</button>
    </div>
  </div>
</div>

<!-- Modal -->
<div class = "modal fade" id = "dataModal<?php echo $record['ID']; ?>" tabindex = "-1" role = "dialog" aria-labelledby = "exampleModalLabel" aria-hidden = "true" >
  <div class = "modal-dialog modal-lg" role = "document">
    <div class = "modal-content">
      <div class = "modal-header">      
        <h5 class = "modal-title" >Product: <?php echo $record['productName']; ?></h5> 
        <button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close">
          <span aria-hidden = "true">&times;</span>
        </button>
      </div>

      <div class = "modal-body">

<div class = "lead">Ask us about this product</div>

<form id = "contactForm" method = "post">
<div class = "form-row">
<div class = "col-md-4 mb-3">
<label>Name</label>
     <input type = "text" name = "name" id = "name" class = "form-control" placeholder = "Your name" required />
</div>
     <div class = "col-md-5 mb-3">
     <label>E-mail</label>
       <input type = "email" name = "email" id = "email" class = "form-control" placeholder = "Your e-mail" required />
</div>

</div>

<div class = "form-row">
<div class = "col-md-12 mb-3">
<label>Message</label>
<textarea class = "form-control" type = "text" name = "message" id = "message" rows = "3"  placeholder = "Your message" required></textarea>
</div>
</div>

      </div>
      <div class = "modal-footer">
        <button type = "button" class = "btn btn-secondary" data-dismiss = "modal">CLOSE</button>

         <button type = "submit" class = "btn btn-success" id = "submit" >SEND</button>
</form>
      </div>
    </div>
  </div>
</div>
<?php } ?>
</div>

<script type = "text/javascript" language = "javascript" >

$(document).on('submit', '#contactForm', function(event){
        event.preventDefault();
    $.ajax({
                url:"insert.php",
                method:'POST',
                data:new FormData(this),
                contentType:false,
                processData:false,
                success:function(data){
                    alert("Message sent!");                 
                    $("#contactForm")[0].reset();
                    $('#dataModal').hide();
                    $(".modal-backdrop").remove();

                }
});
});

</script>

Что в таком случае может быть и что делать? Спасибо всем.

Я не уверен, что это опечатка, но вместо этого $('#dataModal<?php echo $record['ID']; ?>'].hide(); должно быть $('#dataModal<?php echo $record['ID']; ?>').hide();. Перед ).hide() должна стоять скобка. Также вы также можете использовать $('#dataModal<?php echo $record['ID']; ?>').modal('hide'), чтобы закрыть модальное окно и фон.

StaticBeagle 02.03.2019 22:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
775
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Редактировать: Вы можете просто использовать $('.modal').hide(), если хотите скрыть только модальное окно.

Вам нужно установить значение модального идентификатора внутри скрипта, например:

<script type = "text/javascript">
    var id = '#dataModal<?php echo $record['ID']; ?>';
</script>

Затем вы можете использовать:

$(id).hide();

Спасибо за ваш отзыв @AnuragSrivastava. Я вставил идентификатор переменной в сценарий Ajax и не работал. Что бы это могло быть?

Michel Xavier 02.03.2019 21:44

К сожалению, он не работает. Это мой полный код Ajax: <script type = "text/javascript" language = "javascript" > $(document).on('submit', '#contactForm', function(event){ event.preventDefault(); var id = '#dataModal<?php echo $record['ID']; ?>'; $.ajax({ url:"insert.php", method:'POST', data:new FormData(this), contentType: false, processData:false, success:function(data){ alert("Сообщение отправлено!"); $("#contactForm")[0].reset(); $(id).hide(); $(". модальный фон").remove(); } }); }); </скрипт>

Michel Xavier 02.03.2019 22:28

Другие вопросы по теме