【问题标题】:How ajax work in dynamically generated divajax 如何在动态生成的 div 中工作
【发布时间】:2018-04-06 05:33:53
【问题描述】:

我正在销售产品,我使用 AJAX 根据从下拉列表到另一个下拉列表的选择来捕获数据。当我动态创建一个字段时,它只工作一次,我希望它工作 N 次。

这是我的 HTML 和 PHP 代码:

    <div class="row col-md-12 mrg-top-20">
<h4 class="card-title" style="color:#ff0033">Sales Details</h4><br>


    <div class="col-md-12"></div>
    <div class="row col-md-12" data-duplicate="add">

        <div class="col-md-4">
        <label>Select <strong>Installation Date</strong></label>
                <div class="form-group">
                    <div class="timepicker-input input-icon form-group">
                        <i class="ti-time"></i>
                        <input type="text" name="ins_date" class="form-control datepicker-1" placeholder="Datepicker" data-provide="datepicker">
                    </div>  
                </div>
        </div>
        <div class="col-md-4" id="sel_dynamic">
                <div class="form-group">
                <label>Select <strong>Manufacturer</strong></label>
                <select name="manu" id="manu" class="form-control" style="width:100%"> 
                    <option disabled="disabled" selected="selected">Select Manufacturer</option>
                    <?php
                        $data = mysqli_query($conn,"SELECT * FROM manufacturer_details");
                        while($itemcat = mysqli_fetch_array($data))
                        {
                    ?>
                    <option value="<?php echo $itemcat['MANUFACTURER_ID']; ?>"><?php echo $itemcat['MANUFACTURER_NAME'];?></option>
                    <?php
                        }
                    ?>
                </select>
                </div>
        </div>

        <div class="col-md-4">
            <div class="form-group">
                <label>Select <strong>Modal</strong></label>
                <select name="modal" id="modal" class="form-control" style="width:100%"> 
                    <option value="" selected disabled="disabled">Select Modal...</option>

                </select>
            </div>
        </div>

        <div class="col-md-4">  
            <div class="form-group">
                <label>Ser<strong>ial</strong></label>
                <input type="text" name="serial" placeholder="Enter Serial No" class="form-control">
            </div>
        </div>


        <div class="col-md-4">
            <label>Select <strong>AMC Start Date</strong></label>
            <div class="form-group">
                <div class="timepicker-input input-icon form-group">
                    <i class="ti-time"></i>
                    <input type="text" name="amc_date" class="form-control datepicker-1" placeholder="Datepicker" data-provide="datepicker" data-date-format="mm/dd/yyyy">
                </div>  
            </div>
        </div>


        <div class="col-md-4">
            <label>Select <strong>AMC End Date</strong></label>
            <div class="form-group">
                <div class="timepicker-input input-icon form-group">
                    <i class="ti-time"></i>
                    <input type="text" name="amc_edate" class="form-control datepicker-1" placeholder="Datepicker" data-provide="datepicker" data-date-format="mm/dd/yyyy">
                </div>  
            </div>
        </div>  

    </div>  

    <div>
        <input type="button" id="add" data-duplicate-add="add" class="btn btn-info" value="+"/>
    </div>
    <div >
        <input type="button"  data-duplicate-remove="add" class="btn btn-info" value="-"/>
    </div>
</div>

这是我每次调用 Ajax 的 Js 脚本

<script type="text/javascript">
    $(document).ready(function()
    {
        $("#sel_dynamic").on("change","#manu",(function() //just try to use on change
        {
            var id = $("#manu").val();
            var dataString = 'id='+ id;
            $.ajax
            ({
                type: "POST",
                url: "ajax_modal.php",
                data: dataString,
                cache: false,
                success: function(html)
                {
                    $("#modal").html(html);
                } 
            });
        });
    });
</script>

这是我的 Ajax 文件

    <?php
include('script/db.php');
if($_POST['id'])
{
    $id=$_POST['id'];
    $sql=mysqli_query($conn,"select * from modal_details where MANUFACTURER_ID='".$id."'");
?>

    <option selected disabled="disabled">Select Modal Name</option>
<?php
    while($row = mysqli_fetch_assoc($sql))
    {
        $id = $row['MODAL_ID'];
        $data = $row['MODAL_NAME'];
        echo '<option value="'.$id.'">'.$data.'</option>';
    }
}
?>

每当我动态创建一个新字段时,我的 AJAX 就无法正常工作。

【问题讨论】:

  • 只是为了澄清。您希望模态详细信息生成一个包含查询结果的选择框吗?
  • Whenever I create new field dynamically-> 动态创建哪个字段?另外,如果动态创建多个字段,id 会因为重复而变得无用。
  • 尝试在此选择框的父 div 中使用 add id id="dynamic_select" 并使用 $("#dynamic_select").on('change','#manu',(function() 或直接使用 $(document).on('change','#manu',(function()
  • 你有什么错误吗?
  • @SupunPraneeth 不,我没有收到任何错误,但下拉菜单第二次不起作用

标签: javascript php jquery ajax


【解决方案1】:
Try this :

<script type="text/javascript">
    $(document).ready(function()
    {
        $(document).on('change','#manu',function()
        {
            var id = $("#manu").val();
            var dataString = 'id='+ id;
            $.ajax
            ({
                type: "POST",
                url: "ajax_modal.php",
                data: dataString,
                cache: false,
                success: function(html)
                {
                    $("#modal").html(html);
                } 
            });
        });
    });
</script>

【讨论】:

  • 如果我在第二个 div 中更改制造商,它仅适用于第一个 div,它的第一个 div 的更改模式
  • 像这样使用多重选择器 $(document).on('change','#manu,#manu2 ',function() 并使用 $(this).children('#modal' )
  • 告诉我如何使用它??我对ajax的了解较少
  • 告诉我你是如何改变第二个 div 的。需要一些解释。
  • 我使用了添加/删除按钮,在其中我第二次复制了整个 div
【解决方案2】:

cmets 明确表示您正在复制表单。我认为您的页面上有重复的 ID,您的 jQuery 事件将不再起作用。一个 ID 只能出现一次。

看这里: Clone form and increment

【讨论】:

    【解决方案3】:
    Add the class to select as shown below: 
    
    <select name="manu" id="manu" class="form-control manuClass" style="width:100%">
    
    And use the below script
    
    <script type="text/javascript">
        $(document).ready(function()
        {
            $(document).on('change','.manuClass',function()
            {
                var id = $(this).val();
                var dataString = 'id='+ id;
                $.ajax
                ({
                    type: "POST",
                    url: "ajax_modal.php",
                    data: dataString,
                    cache: false,
                    success: function(html)
                    {
                        $(this).parent().parent().next().children().children("#modal").html(html);
                    } 
                });
            });
        });
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 2012-04-09
      • 2013-04-11
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      相关资源
      最近更新 更多