javascript - PHP、JQuery - 如何动态添加更多字段,包括下拉列表(来自数据库的值和一个文本框)

标签 javascript php jquery html

我有 2 个表单组件,我想动态添加(允许用户添加超过 1 个)

首先,我有一个下拉列表,其中包含从 MySQL 填充的值。后跟一个文本框,允许用户输入一些查询。

基本上,下拉列表将显示一个用户列表和一个文本框,供此人向此人键入消息。

用户可以发送给多个不同的用户,因此有一个添加按钮可以添加另一个下拉列表和一个文本框..

我尝试使用 jQuery 追加。但 append 不接受 PHP 作为其服务器端。 我还尝试使用 jQuery 克隆来克隆整个 DIV,但失败了。

我正在使用这段代码动态添加字段

Add Remove field dynamically

这是我的下拉列表和文本框的代码

<div class="input_fields_wrap">
<button class="add_field_button">Add More Fields</button>
<div> 
    <select name="msgrecever1" style="background:#252525" >
          <option value="">Select Faculty</option>
          <?php
            require_once("../dbconnection/dbcon.php");
            $sql="SELECT * FROM user WHERE role='Faculty'";
            $records=mysqli_query($con,$sql);
            while($row=mysqli_fetch_assoc($records)){
            $name=$row['username'];
            echo "<option value='$name'>".$name."</option>";
            }                               
            ?>

          </select><input type="text" name="mytext[]"></div>

只要用户按下“添加新字段”,我就想复制尽可能多的上述代码

jQuery:

$(document).ready(function() {

    var max_fields      = 10; //maximum input boxes allowed
    var wrapper         = $(".input_fields_wrap"); //Fields wrapper
    var add_button      = $(".add_field_button"); //Add button ID


     x = 1; //initlal text box count
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();

        if(x < max_fields){ //max input box allowed
            x++; //text box increment


            $(wrapper).append('<div><input type=\"text\" name=\"mytext[]\"/><a href=\"#\" class=\"remove_field\">Remove</a>');

        }
    });

    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove(); x--;
    })
});

=================

编辑:

我已经使用了这个解决方案并且它有效。

<?php require_once("../dbconnection/dbcon.php"); 

if(isset($_POST['submit']))
{
    $capture_field_vals ="";
    foreach($_POST["msgrecipient"] as $key => $text_field)
    {
        echo "Key: $key; Value: $text_field<br />\n";

        echo "<br>";

    }
        foreach($_POST["enquiry"] as $key => $text_field2)
        {
        echo "Key: $key; Value: $text_field2<br />\n";

        echo "<br>";
        }
}

    ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Application</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(function () {
    $('#btnAdd').click(function () {
        var num = $('.clonedInput').length, // how many "duplicatable" input fields we currently have
            newNum = new Number(num + 1), // the numeric ID of the new input field being added
            newElem = $('#testingDiv' + num).clone().attr('id', 'testingDiv' + newNum).fadeIn('slow'); // create the new element via clone(), and manipulate it's ID using newNum value

        newElem.find('.test-select').attr('id', 'ID' + newNum + '_select').attr('name', 'ID' + newNum + '_select').val('');
        newElem.find('.test-textarea').val('');
         // insert the new element after the last "duplicatable" input field
        $('#testingDiv' + num).after(newElem);
        // enable the "remove" button
        $('#btnDel').attr('disabled', false);
        // right now you can only add 5 sections. change '5' below to the max number of times the form can be duplicated
        if (newNum == 5) $('#btnAdd').attr('disabled', true).prop('value', "You've reached the limit");
    });

    $('#btnDel').click(function () {
        // confirmation
        if (confirm("Are you sure you wish to remove this section of the form? Any information it contains will be lost!")) {
            var num = $('.clonedInput').length;
            // how many "duplicatable" input fields we currently have
            $('#testingDiv' + num).slideUp('slow', function () {
                $(this).remove();
                // if only one element remains, disable the "remove" button
                if (num - 1 === 1) $('#btnDel').attr('disabled', true);
                // enable the "add" button
                $('#btnAdd').attr('disabled', false).prop('value', "[ + ] add to this form");
            });
        }
        return false;
        // remove the last element

        // enable the "add" button
        $('#btnAdd').attr('disabled', false);
    });

    $('#btnDel').attr('disabled', true);
});
</script>
</head>
<body>
<form action="#" method="post">

    <!--
    ########################################## -->
    <!-- START CLONED SECTION -->
    <!-- ########################################## -->
 <div id="testingDiv1" class="clonedInput">

        <select name="msgrecipient[]" id="select">
            <option value="">Select Faculty</option>
              <?php
                require_once("../dbconnection/dbcon.php");
                $sql="SELECT * FROM user WHERE role='Faculty'";
                $records=mysqli_query($con,$sql);
                while($row=mysqli_fetch_assoc($records)){
                $name=$row['name'];
                echo "<option value='$name'>".$name."</option>";
                }

                ?>

              </select>

        <textarea id="textarea" name="enquiry[]" class="test-textarea"></textarea>

    </div>
    <!--/clonedInput-->
    <!-- ########################################## -->
    <!-- END CLONED SECTION -->
    <!-- ########################################## -->
    <!-- ADD - DELETE BUTTONS -->
    <div id="add-del-buttons">
        <input type="button" id="btnAdd" value="[ + ] add to this form">
        <input type="button" id="btnDel" value="[ - ] remove the section above">
    </div>
    <!-- /ADD - DELETE BUTTONS -->
    <input type="submit" name="submit"class="button button-block" value="Submit"/>
</form>


</body>
</html>

最佳答案

假设您有这样的标记:

<form id="faculty_wrapper">
    <div class="faculty_row">
        <select id="faculty" name="faculty[]">
            <option value="faculty_one">faculty_one</option>
            <option value="faculty_one">faculty_two</option>
            <option value="faculty_one">faculty_three</option>
            <option value="faculty_one">faculty_four</option>
        </select>
        <input type="text" name="message[]">
    </div>
</form>

<a href="#" id="add_more">Add More</a> <!-- Add More Rows -->
<a href="#" id="submit">Submit</a>  <!-- Submit Button for further work -->

Javascript:

jQuery(document).ready(function($){

   $("#add_more").on('click', function(e){
        e.preventDefault(); // Prevent Default the event
        var clone = $(".faculty_row").eq(0).clone(); // clone only first item
        $("#faculty_wrapper").append(clone); // append it to our form
   });

    $("#submit").on('click', function(e){
       e.preventDefault();
        alert($("#faculty_wrapper").serialize()); // get serialize data for further work
    })
})

您可以检查工作 Jsfiddle .

关于javascript - PHP、JQuery - 如何动态添加更多字段,包括下拉列表(来自数据库的值和一个文本框),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33349772/

相关文章:

javascript - YouTube API 返回的数据似乎是不可变的?

javascript - 对话框未返回 true,因此由于事件发生而未触发 onClick

php - 如何通过cron作业运行php文件

php - 将可变级别数组应用于现有数组

jquery - 使用两行标题进行表格排序

javascript - 比较两个不同的数组元素删除node js中的匹配元素

javascript - 当用户从顶部滚动超过一定距离时执行 Javascript

php - json_encode() 非 utf-8 字符串?

javascript - jQuery datetimepicker - 日期格式不起作用

javascript - 如何使用 JQuery、HTML 和 CSS 制作多类别过滤器