为什么我的Javascript全局变量只更新一次?jQuery最后一个子选择器错误
Why do my Javascript global variables only update once? jQuery last-child selector error?
我正在尝试学习jQuery,并在JS Fiddle上测试想法,我的大脑似乎冻结了。
下面的代码应该显示表的一行,该行末尾有一个"+"以添加新行。第一次单击时,它会将新ID正确地分配给新行(并在新行中将值重置为原始状态,将新行的"+"更改为"-")。我不明白为什么oldID和newID的值在第一次运行代码后没有继续增加。
它读取"32"作为旧的最后一个子项的数字部分,然后创建一个新行,"33"将其附加到表中,但在那之后,使用最后一个子选择器重新计算id似乎并没有真正选择新的最后一个子项。
虽然关于如何使代码变得更好的建议是受欢迎的,但我真的很想知道我在当前代码中缺少了什么,尽管它可能很不雅
谢谢!
<table>
<tbody id="investigators">
<tr id="investigator.32">
<td>
<input name="person.32" id="person.32"
type="text" value=""
placeholder="Lastname, Firstname"
onfocus="this.select();" />
</td>
<td style="text-align:center" id="add_more.32">
<img src="add_green.svg"
alt="[+]" title="Add investigator"
style="height:1em; width:1em;" />
</td>
</tr>
</tbody>
和Javascript/jQuery代码:
var oldID = parseInt($("#investigators :last-child")
.attr("id").split(".")[1]);
var newID = oldID+1;
$("#add_more''."+oldID).click(function(){
var $newPI = $("#investigator''."+oldID).clone(true);
$newPI.find("#person''."+oldID)
.val(null)
.attr("placeholder","Jungle, George of")
.attr("name","person."+newID)
.attr("id", "person."+newID);
$newPI.find("#add_more''."+oldID)
.attr("id","add_more."+newID);
$newPI
.attr("id","investigator."+newID);
$newPI.appendTo("#investigators");
$("#add_more''."+oldID+" :first-child")
.attr("src","delete_red.svg")
.attr("alt","[X]")
.attr("title","Remove investigator");
oldID = parseInt($("#investigators :last-child")
.attr("id").split(".")[1]);
newID = oldID+1;
});
我认为您的问题是,您永远不会绑定到新建人员的click
。调用$("#add_more''."+oldID).click(...)
将绑定到原始项,但不会绑定到oldID
更改后的新项。
相反,我认为你应该把类放在你的元素上:
<td>
<input name="person.32" id="person.32"
class="person" <!-- the important line -->
type="text" value=""
placeholder="Lastname, Firstname"
onfocus="this.select();" />
</td>
然后,您可以使用类似jQuery.on:的东西
$(document).on("click", "person", function() {
// Check that this is the last person here
});
这样,每次添加新人时,就不必绑定新的处理程序,它已经可以工作了。
相关文章:
- 如何使用jQuery一次关闭多个弹出窗口
- 使用Ajax和Jquery一次加载100个块的Wordpress帖子
- JQuery-一次停止所有音频
- 如何使用 jQuery 一次只选择一个具有不同名称的单选按钮
- 使用 Javascript/jQuery 一次播放一个 HTML 音频文件
- jQuery一次又一次地调用该函数
- jQuery一次触发所有模态窗口,即使具有不同的目标 #id
- 如何打开IndexedDB只用jquery一次承诺
- Jquery一次选择所有选中和选中的元素
- Jquery一次打开一个部分
- JQuery一次切换两个类
- Jquery一次将多个选择器推入一个对象
- 使用jQuery一次输入回显五次
- 如何用jQuery一次填充一个无序列表中的一个元素
- 使用jquery一次又一次地更改字符串
- 如何使用jQuery一次只显示一个弹出框
- 使用jquery一次简化多个属性的编写
- 使用JQuery一次删除一个项
- jQuery一次为一个动态元素设置动画
- Jquery 一次循环和绑定 10 条记录