使用jQuery根据动态生成的html动态添加html
Dynamically add html depending on dynamically generated html with jQuery
我目前正在进行一个项目,我必须为该项目开发一个允许操作数据库中的表的WordPress插件。我的工作是基于这个插件的,我正在对其进行改进和编辑,以满足我公司的要求:https://wordpress.org/plugins/create-db-tables/
然而,我的问题并不涉及MySQL,而是涉及html、Php和jQuery(尤其是我根本不熟悉的jQuery)。这是关于动态生成一个表单,它本身取决于动态生成的表单(是的…)
使用以下代码,插件用户可以动态地将行添加到他正在创建的表中。我希望他能够添加"子行"(我知道如何在服务器端处理,我这里的问题只是接口),比如:
https://i.stack.imgur.com/9FfbW.png
当用户单击"添加子例程"时,会出现一个区域,他可以在其中填写表格等。它对第一行非常有效(至少在界面上),但在那之后,每当我单击另一个"添加子进程"按钮时,都不会发生任何事。
如果有人能抽出时间告诉我哪里做错了,我将不胜感激。非常感谢!:)
这是我的代码:(第一个jQuery脚本似乎有效,我不是开发它的人。我复制了它,并试图将第二个脚本适应我的"子行"要求)
<form id="create-table" method="post" action="<?php echo admin_url('admin-post.php'); ?>">
<input type="hidden" name="action" value="add_table">
<fieldset class="table-fieldset">
<label id="table-name">Table Name:</label> <br />
<span style="position: relative; top: 2px;"><?php echo "Choose prefix (by default wp_ ) : " ?></span><input type="text" class="prefix-name" name="prefix_name" size="4" id="prefix-name"><br />
<span style="position: relative; top: 2px;"><?php echo "Choose table name :" ?></span><input type="text" class="table-name" name="table_name" size="30" id="table-name">
<span>(Alphanumeric only, no special characters.)</span> <br/> <br/>
<span><font color="blue"><strong>Will this table be used for user authentication ? </strong></font></span><input type="checkbox" class="is-user-auth" name="is_user_auth" id="is-user-auth"><br/>
<span><strong>/!' Only one table at a time can be used for user authentication : if a current table is used for this purpose, it won't be anymore.</strong></span><br/><br/>
</fieldset>
<div id="rows">
<fieldset class="row-fieldset" id="row-fieldset" value="1"><label id="row-label">Row:</label><input type="text" class="name-input" name="name[]" placeholder="Name" size="20"><input type="text" class="type-input" name="type[]" placeholder="Type [Ex: bigint(20)]" size="20"><span id="null-label">Null</span><input type="checkbox" class="null-input" name="null[]"><input type="text" class="default-input" name="default[]" placeholder="Default Value" size="20"><span id="unique-label">Unique</span><input type="checkbox" class="unique-input" name="unique[]"><button type="button" class="row-dynamic" style="background-color: #E3F6CE">Add subrows</button><div id="subrows1" value="1"></div></fieldset>
</div>
<div id="add-row">
<button type="button" class="add-row button-secondary">Add Row</button>
</div>
<fieldset>
<input type="hidden" id="items" name="items" value="1" />
</fieldset>
<fieldset>
<input type="hidden" id="subrowitems" name="subrowitems" value="101" />
</fieldset>
<fieldset>
<button type="submit" class="button button-primary button-large">Create Table</button>
</fieldset>
</form>
<!-- Script to add rows -->
<script>
jQuery(function($) {
$('.add-row').click(function () {
$('#items').val(function(i, val) { return +val+1 });
var val_2=$('#items').attr('value');
var subrow_name = 'subrows'+val_2;
var rowHTML = '<fieldset class="row-fieldset" id="row-fieldset" value='"'+val_2+''"><label id="row-label">Row:</label><input type="text" class="name-input" name="name[]" placeholder="Name" size="20"><input type="text" class="type-input" name="type[]" placeholder="Type [Ex: bigint(20)]" size="20"><span id="null-label">Null</span><input type="checkbox" class="null-input" name="null[]"><input type="text" class="default-input" name="default[]" placeholder="Default Value" size="20"><span id="unique-label">Unique</span><input type="checkbox" class="unique-input" name="unique[]"><button type="button" class="row-dynamic" style="background-color: #E3F6CE">Add subrows</button><div id='"'+subrow_name+''" value=' + val_2 + '></div></fieldset>';
$('#rows').append(rowHTML);
});
$("input.name-input").on({
keydown: function(e) {
if (e.which === 32)
return false;
},
change: function() {
this.value = this.value.replace(/'s/g, "");
}
});
$("input.table-name").on({
keydown: function(e) {
if (e.which === 32)
return false;
},
change: function() {
this.value = this.value.replace(/'s/g, "");
}
});
});
</script>
<!-- Script to add subrows -->
<script>
jQuery(function($) {
$('.row-dynamic').click(function () {
$('#subrowitems').val(function(i, val) { return +val+1 });
var val_3=$('#subrowitems').attr('value');
var subrowHTML = '<fieldset class="subrow-fieldset" value='"' +val_3+ ''"><label id="subrow-label">Subrow:</label><input type="text" class="subrow-name-input" name="name[]" placeholder="Name" size="20" style="background-color: #E3F6CE"><input type="text" class="subrow-type-input" name="type[]" placeholder="Type [Ex: bigint(20)]" size="20" style="background-color: #E3F6CE"><span id="subrow-null-label">Null</span><input type="checkbox" class="subrow-null-input" name="null[]" style="background-color: #E3F6CE"><input type="text" class="subrow-default-input" name="default[]" placeholder="Default Value" size="20" style="background-color: #E3F6CE"><span id="subrow-unique-label">Unique</span><input type="checkbox" class="subrow-unique-input" name="unique[]" style="background-color: #E3F6CE"></fieldset>';
var subrow_val = '#subrows'+$('#row-fieldset').attr('value');
$(subrow_val).append(subrowHTML);
});
$("input.subrow-name-input").on({
keydown: function(e) {
if (e.which === 32)
return false;
},
change: function() {
this.value = this.value.replace(/'s/g, "");
}
});
$("input.table-name").on({
keydown: function(e) {
if (e.which === 32)
return false;
},
change: function() {
this.value = this.value.replace(/'s/g, "");
}
});
});
</script>
您的HTML sintax(例如#row-fieldset
)上有一些重复的id
如果您检查HTML代码,则会使用行字段集id
初始化fieldset
标记
<fieldset class="row-fieldset" id="row-fieldset" value="1">
然后用相同的id
创建一个新的
var rowHTML = '<fieldset class="row-fieldset" id="row-fieldset" value='"'+val_2+''
因此,当JQuery试图找到合适的id
时,只找到第一个。
我在添加子行按钮中添加了一个值,用于定位正确的行
此外,你没有提供任何jQuery版本,所以我使用了2.2.0
检查这个小提琴看它在运行
希望它能帮助
- 使用jQuery根据动态生成的html动态添加html
- HTML动态更新滑块输入
- 无法从HTML动态表中获取数据
- Python/JavaScript/HTML 动态创建计算机网络图
- 从 html 动态调用 javascript 对象函数
- 通过内部HTML动态创建日历不起作用
- 如何将节点内容从 xml 复制到硬编码的 html(动态到原始 html)
- 为什么我无法使用jQuery将HTML动态添加到页面
- 如何读取html表中复选框的值,该表是作为内部html动态插入到表单元格中的
- 如何使用Javascript获取HTML动态用户输入的值
- 从html动态加载angularjs控制器
- Html动态错误javascript Uncaught TypeError:$不是函数
- 如何将html动态嵌入到框架标记中
- HTML动态裁剪
- 使用jQuery和HTML动态创建标签,并使用jQuery访问其文本值
- HTML动态/响应式元素定位
- 我如何使用下面的html动态创建wordcloud为我的android应用程序
- 使用.html()动态更改数据后单击function
- JavaScript中的Html动态表
- JS/HTML——动态创建带有选项的select元素