javascript - 使用来自 PHP 的数据在单击按钮时添加输入字段
问题描述
我正在尝试在按钮上添加输入字段,单击我应该正常工作的所有内容,但需要做 3 件事:
- 我需要输出
2
这样的值{{ $formData['member_2'] }}
对于数字 1,我将其添加到以下值:
value="{{ $formData['member_'.'+ i +'] }}"
但我的输出member_+ i +
没有返回member_2
- 然后我需要限制只能创建 7 个输入字段。
- 最后,当我删除一行时,我需要它来删除计数。
这是我的完整代码。为了便于阅读,我删除了样式。
HTML:
<button type="button" name="add" id="add">Add Other Members</button>
<div id="dynamic_field"></div>
JS:
$(document).ready(function() {
var i=1;
$('#add').click(function() {
i++;
$('#dynamic_field').append('<div id="row'+i+'"><label" for="member_'+ i +'">Member '+ i +'</label><input type="text" name="member_' + i + '" value=""><button type="button" class="btn_remove" name="remove" id="'+ i +'">X</button></div>')
});
$(document).on('click', '.btn_remove', function() {
var button_id = $(this).attr("id");
$('#row' + button_id + '').remove();
});
});
运行代码片段以查看问题 2 和 3。(请注意,当您删除输入时,计数不会重新开始。它会从停止的地方继续。)
$(document).ready(function() {
var i=1;
$('#add').click(function() {
i++;
$('#dynamic_field').append('<div id="row'+i+'"><label" for="member_'+ i +'">Member '+ i +'</label><input type="text" name="member_' + i + '" value=""><button type="button" class="btn_remove" name="remove" id="'+ i +'">X</button></div>')
});
$(document).on('click', '.btn_remove', function() {
var button_id = $(this).attr("id");
$('#row' + button_id + '').remove();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" name="add" id="add">Add Other Members</button>
<div id="dynamic_field"></div>
解决方案
2 和 3 的问题非常简单。您只需要i
在删除成员时减少变量。另外,当i>=7
.
$(document).ready(function() {
var i = 1;
$('#add').click(function() {
if (i <= 7) {
$('#dynamic_field').append('<div id="row' + i + '"><label" for="member_' + i + '">Member ' + i + '</label><input type="text" name="member_' + i + '" value=""><button type="button" class="btn_remove" name="remove" id="' + i + '">X</button></div>')
i++;
}
});
$(document).on('click', '.btn_remove', function() {
var button_id = $(this).attr("id");
i--;
$('#row' + button_id + '').remove();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" name="add" id="add">Add Other Members</button>
<div id="dynamic_field"></div>
这种方法的问题是删除列表中间的元素会打乱顺序。你最终会得到重复的元素。
您可以通过允许仅删除最后一个元素来解决此问题。
$(document).ready(function() {
var i = 1;
$('#add').click(function() {
if (i <= 7) {
$('#dynamic_field').append('<div id="row' + i + '"><label" for="member_' + i + '">Member ' + i + '</label><input type="text" name="member_' + i + '" value=""></div>')
i++;
$('.btn_remove').removeClass('hidden');
}
});
$(document).on('click', '.btn_remove', function() {
var button_id = $(this).attr("id");
i--;
$('#row' + $('#dynamic_field div').length).remove();
if (i<=1) {
$('.btn_remove').addClass('hidden');
}
});
});
.hidden {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" id="add">Add Other Members</button>
<div id="dynamic_field"></div>
<button type="button" class="btn_remove hidden">Remove last</button>
关于第一个问题,我猜双花括号是服务器端模板的东西(如 Laravel 的 Blade)。在这种情况下,它会在页面发送到客户端之前在服务器端生成。这意味着,在 JS 有任何机会被执行之前。您的服务器端代码不知道i
。
如果您使用 PHP 在服务器中生成元素,则不能使用i
,因为服务器端不知道该变量。但是,你不应该需要它。
如果是用 JS 动态生成元素,则不能使用里面的 PHP 模板。为时已晚,代码已经在客户端执行。您可以做的是使用 PHP 创建一个 JS 对象,其中包含创建元素所需的所有信息。就像是:
echo "<script>var myJsData=" . json_encode($myPHPdata) . ";</script>";
然后,您可以使用它在带有 JS 的客户端中动态生成您的元素。
推荐阅读
- stm32 - 如何用keil v5.30生成.elf文件在proteus中模拟
- angular - 向 API 发送号码
- python - 如何在熊猫中使用多个正则表达式和命名组
- sql-server - sp_OACreate 执行上的“设置后无法更改线程模式”
- python - 带有 kivy GUI 的语音助手
- android - Flutter:如何从 Sembast 数据库中存储和检索单个项目/对象
- javascript - Axios 使用 reactjs 返回混乱的 HTML
- python - 使用 for in 循环解决简单的 Python 挑战
- mysql - Docker:无法打开到 localhost:12345 的 TCP 连接
- python - IndentationError:使用 conn.cursor 运行时