簡體   English   中英

使用php動態添加表單字段

[英]Add form fields dynamically with php

提到這個職位。 使用PHP添加動態填充下拉列表的表單字段我使用了他的代碼,但由於我對javascript幾乎一無所知,因此將對其進行修改以滿足我的需要。 除了按下+按鈕時,所有操作均正常進行,它再也不會創建更多輸入框。 任何幫助都會很棒。

這是我的php文件

<?php
session_start();
require_once("dbconfig.php");
?>
<html>
<head>
<script type="text/javascript" src="addfish.js"></script>
</head>
<form id="form1" name="form1" method="post" action="results.php">
 <div id="itemRows">
    <select name="species">
            <option value="">Select Species</option>';
            <?php $stmt = $dbc->prepare("SELECT species FROM fish");
            $stmt->execute();

while($speciesq = $stmt->fetch(PDO::FETCH_ASSOC))
{
    echo "<option value=\"" . $speciesq['species'] ."\">" . $speciesq['species'] ."</option>";
}
?> 
</select>
    Number: <input type="text" name="speciesnumber1" size="7" /> Weight: <input type="text" name="speciesweight1" /> <input onClick="addRow(this.form);" type="button" value="+" />     
    </div></form>


</html>

我的addfish.js文件

var rowNum = 0;
var ddsel = '<select name="species'+rowNum+'>';
var ddopt = '<option value="">Select Species</option>';
var ddselc= '</select>';
;
function addRow(frm) {
    rowNum ++;
    $.post("getlist.php", function(data) {
        var frm = document.getElementById('form1')
        for (var i=0; i<data.length; i++) {
            ddopt += '<option value="'+data[i].value+'">'+data[i].value+'</option>';
        } 
        var row = '<p id="rowNum'+rowNum+'">'+ddsel+ddopt+ddselc+'Number: <input type="text" name="speciesnumber'+rowNum+'" size="7" value="'+frm.speciesnumber1.value+'"> Weight: <input type="text" name="speciesweight'+rowNum+'" value="'+frm.speciesweight.value+'"> <input type="button" value="-" onclick="removeRow('+rowNum+');"></p>';
        jQuery('#itemRows').append(row);
        frm.add_qty.value = '';
        frm.add_name.value = '';
    }, "json");
}
function removeRow(rnum) {
    jQuery('#rowNum'+rnum).remove();
}

這是我的getlist.php

<?php
session_start();
include("dbconfig.php");
$stmt = $dbc->prepare("SELECT species FROM fish");
$stmt->execute();
$result = array();
while ($rows = $stmt->fetch(PDO::FETCH_ASSOC)){
   $result[] = array(
    'value' => $rows['species'],
    );
}
echo json_encode($result);
?>

您的代碼使用的是jQuery,但看不到您在哪里包含此庫。 嘗試將這段代碼放在header中包含addfish.js之前:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

如果您需要動態添加帶有此字段的行,建議您創建一行,即原始行:

<div class="rows" data-rows="1">
    <div class="row row-first">
       <select name="row[0][select_name]">
          <option value="1">Some value</option>
       </select>

       <input type="text" name="row[0][text_name]" />
    </div>
</div>

和JavaScript

<script type="text/javascript">
    $('#add_row').on('click', function(){
        var row = $('.row-first').clone(); // Clone the first row
        var rows = parseInt($('.rows').attr('data-rows'));
        rows++;
        $('.rows').attr('data-rows', rows);

        row.removeClass('row-first'); // Prevent multiple rows cloning

        $(row).find('[name]').each(function(){
              var name = $(this).attr('name');
              name = name.replace(/\[[0-9+]\]/, '[' + rows + ']');
              $(this).attr('name', name);
              $(this).val("").change(); // Null the select
        });

       $('.rows').append(row);
    });
</script>

因此,您要做的是克隆第一行並刪除要搜索的類。 增加行數並將行中的所有名稱替換為新的行號,例如row [0] [name]變為row [1] [name],然后追加行。

同樣,當您編輯行時,必須將數據行設置為確切的數字。 您可以像count($ myRows)一樣進行操作 而且,當您編寫刪除行功能時,請勿刪除第一行。

希望它幫助。

// You can use this 

var row = '<p id="rowNum'+rowNum+'">'+ddsel+ddopt+ddselc+'Number: <input type="text" name="speciesnumber'+rowNum+'" size="7" value="'+$($(frm).find('input[name="speciesnumber1"]')[0]).val()+'"> Weight: <input type="text" name="speciesweight'+rowNum+'" value="'+$($(frm).find('input[name="speciesnumber1"]')[0]).val()+'"> <input type="button" value="-" onclick="removeRow('+rowNum+');"></p>';
            jQuery('#itemRows').append(row);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM