javascript - 将 Bootstrap 模态与动态 PHP 数据重用

标签 javascript php twitter-bootstrap bootstrap-modal

我发现模态具有挑战性,并且我正在使用我真正喜欢的模态的新旋转来处理别人的代码(如果我能让它工作的话)。

模态中填充了基于 ID 的特定于项目的信息,但是当用户单击退出并基于唯一 ID 为不同的特定于项目的信息选择模态触发器时,他们会获取旧信息。看起来模态似乎需要在触发器之间被销毁。以下是该项目需要如何工作:

  1. 使用数据库信息填充库存页面
  2. 点击操作时,获取项目 ID 并传递至模态
  3. 显示包含更多项目特定信息的模态框
  4. 允许用户关闭模态框并单击另一个项目操作
  5. 重复步骤 2-4

这是我当前的代码:

库存.php

触发器:

 <a data-toggle="modal" data-target="#ajax" data-id="<? echo $row['id'];?>" href="./mod/v_email.php?id=<? echo $row['id'];?>" class="btn red btn-sm dropdown-toggle inv_action">Email <i class="icon-note"></i></a>

然后是页面底部的模态初始化:

 <div class="modal fade" id="ajax" role="basic" aria-hidden="true">
     <div class="page-loading page-loading-boxed">
         <img src="../../assets/global/img/loading-spinner-grey.gif" alt="" class="loading">
         <span>
    &nbsp;&nbsp;Loading... </span>
     </div>
     <div class="modal-dialog">
         <div class="modal-content">
         </div>
     </div>
 </div>

v_email.php

 $id=($_GET['id']);

 <div class="modal-header">
    <button type="button" class="close" id="modal_close" data-dismiss="modal" aria-hidden="true"></button>
    <h4 class="modal-title">Let someone know!</h4>
</div>
<div class="modal-body">
    <div class="row">
        <form id="veh_email_form" method="post">
        <div class="col-md-6">
            <div class="input-group">
                <span class="input-group-addon">
                    <i class="fa fa-user"></i>
                </span>
                <input type="text" class="form-control" name="name" placeholder="Name" required="required">
            </div>
            <div class="input-group">
                <span class="input-group-addon">
                    <i class="fa fa-envelope"></i>
                </span>
                <input type="email" class="form-control" name="email" placeholder="Email" required="required">
            </div>
            <div class="input-group">
                <textarea class="form-control" style="width:269px;height:117px;" rows="3" name="message" placeholder="Message">
                <? echo $id;?></textarea>
            </div>
        </div>
    </div>
</div>
<div class="modal-footer">
    <input type="submit" class="btn red-haze" value="Send Email">
</div>
</form>
<script src="../../assets/global/plugins/jquery.min.js" type="text/javascript"></script>
<script>
    $(document).ready(function(){

        $("form#veh_email_form").on("submit",function() {
            $('form#veh_email_form input[type=submit]').attr({disabled: 'disabled',value: 'Submitting Application ...'});
            var formData = $("form#veh_email_form").serialize();
            $.ajax({
                type: 'POST',
                url: './mod/mod_helper/veh_email_proc.php',
                data: formData,
                async: false,
                success: function(msg){
                        if((msg) == 1)  {               
                            $("#modal_close").trigger("click");
                        } 
                        else { 
                            $("#app_error").show();
                        } 
                }               
            });             
            return false;               
        });
        $("#ajax").on('hidden.bs.modal', function () {
            $(this).data('bs.modal', null);
        });
        $("#modal_close").click(function() {
            $('#ajax').removeData('modal');
            }); 
    });
</script>

如您所见,我尝试在单击和隐藏时删除/销毁模态数据,但都不起作用。

当前行为:

场景1:

  • 用户点击第 1 项 - 模态框会显示第 1 项数据
  • 用户关闭第 1 项模态框
  • 用户点击第 2 项 - 模式与第 1 项数据一起出现

场景 2:

  • 用户点击第 3 项 - 模态框与第 3 项数据一起出现
  • 用户关闭第 3 项模式
  • 用户点击第 1 项 - 模态框与第 3 项数据一起出现

我在这里没有看到什么,如果您需要更多信息,请发表评论 - 我可以编辑问题并添加更多内容(尝试包含所有内容,但也要保持小而易读)

最佳答案

我建议将所有脚本保留在 inventory.php 页面中,并从 v_email.php 页面中删除,这样可以解决模式打开新项目详细信息时的问题.

您可以使用

$("#ajax").on('hidden.bs.modal', function () {
    $(this).data('bs.modal', null);
});

$("#ajax").on('hidden.bs.modal', function () {
    $(this).removeData('bs.modal');
});

从模式中清除旧数据

库存.php

HTML

<a data-toggle="modal" data-target="#ajax" data-id="<? echo $row['id'];?>" href="./mod/v_email.php?id=<? echo $row['id'];?>" class="btn red btn-sm dropdown-toggle inv_action">Email <i class="icon-note"></i></a>
 <div class="modal fade" id="ajax" role="basic" aria-hidden="true">
     <div class="page-loading page-loading-boxed">
         <img src="../../assets/global/img/loading-spinner-grey.gif" alt="" class="loading">
         <span>
    &nbsp;&nbsp;Loading... </span>
     </div>
     <div class="modal-dialog">
         <div class="modal-content">
         </div>
     </div>
 </div>

JS

注意:将以下代码放在 jQuery 和 Bootstrap 库之后(记住 jQuery 和 Bootstrap 库始终排在第一位)

$("form#veh_email_form").on("submit",function() 替换为 $(document).on("submit", "#veh_email_form", function ()

<script>
    $(document).ready(function(){
        $(document).on("submit", "#veh_email_form", function () {
            $('form#veh_email_form input[type=submit]').attr({disabled: 'disabled',value: 'Submitting Application ...'});
            var formData = $("form#veh_email_form").serialize();
            $.ajax({
                type: 'POST',
                url: './mod/mod_helper/veh_email_proc.php',
                data: formData,
                async: false,
                success: function(msg){
                        if((msg) == 1)  {               
                            $("#modal_close").trigger("click");
                        } 
                        else { 
                            $("#app_error").show();
                        } 
                }               
            });             
            return false;               
        });
        $("#ajax").on('hidden.bs.modal', function () {
            $(this).data('bs.modal', null);
        });
        $("#modal_close").click(function() {
            $('#ajax').removeData('modal');
        }); 
    });
</script>

v_email.php

<?php
 $id=($_GET['id']);
?>
 <div class="modal-header">
    <button type="button" class="close" id="modal_close" data-dismiss="modal" aria-hidden="true"></button>
    <h4 class="modal-title">Let someone know!</h4>
</div>
<form id="veh_email_form" method="post">
<div class="modal-body">
    <div class="row">
        <div class="col-md-6">
            <div class="input-group">
                <span class="input-group-addon">
                    <i class="fa fa-user"></i>
                </span>
                <input type="text" class="form-control" name="name" placeholder="Name" required="required">
            </div>
            <div class="input-group">
                <span class="input-group-addon">
                    <i class="fa fa-envelope"></i>
                </span>
                <input type="email" class="form-control" name="email" placeholder="Email" required="required">
            </div>
            <div class="input-group">
                <textarea class="form-control" style="width:269px;height:117px;" rows="3" name="message" placeholder="Message">
                <? echo $id;?></textarea>
            </div>
        </div>
    </div>
</div>
<div class="modal-footer">
    <input type="submit" class="btn red-haze" value="Send Email">
</div>
</form>

关于javascript - 将 Bootstrap 模态与动态 PHP 数据重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35464987/

相关文章:

php - 如何创建安全的 php 和 javascript api

需要 PHP 包含文件策略

html - 不同大小的 Twitter Bootstrap 响应图像不成比例地调整大小

javascript - Google BigQuery Python 库下载结果的速度是 Node JS 库的 2 倍

javascript - 将两个不同的参数传递给函数

javascript - Next.js:找不到模块:无法解析 'canvg'

php - 网页安装程序——数据库部署

php - drupal 6中的插入问题

twitter-bootstrap - Bootstrap 4 卡组件作为按钮

css - 仅 1 页 100% 宽度,其余部分保持流畅