Javascript 检查是否存在<;tr>;在下面
我有一段代码,每次我写东西时,它都会给我添加一个额外的输入。 但我有一个问题,即使输入中已经写了一些东西,并且我修改了它,它也会添加一个新的输入。 但我想禁用它 我尝试了一个if检查,但我对html不是很熟悉,所以我不知道如何执行这个检查 有人能告诉我如何检查我正在更改的输入框下面是否有对象吗 谢谢Javascript 检查是否存在<;tr>;在下面,javascript,jquery,html,Javascript,Jquery,Html,我有一段代码,每次我写东西时,它都会给我添加一个额外的输入。 但我有一个问题,即使输入中已经写了一些东西,并且我修改了它,它也会添加一个新的输入。 但我想禁用它 我尝试了一个if检查,但我对html不是很熟悉,所以我不知道如何执行这个检查 有人能告诉我如何检查我正在更改的输入框下面是否有对象吗 谢谢 $(函数(){ var scntDiv=$('p#u scents'); 变量i=$('#p#p').size()+1; $('#addScnt').live('click',function()
$(函数(){
var scntDiv=$('p#u scents');
变量i=$('#p#p').size()+1;
$('#addScnt').live('click',function()){
$('')。附件(scntDiv);
i++;
返回false;
});
$(“.iptArea”).live(“更改”,函数(){
$('')。附件(scntDiv);
i++;
返回false;
});
$('#remScnt').live('click',function()){
如果(i>1){
$(this.parents('tr').remove();
我--;
}
返回false;
});
});代码>
如果要检查输入元素所在的行后是否有行(tr
):
var has_row_after = $( 'input' ).closest('tr').next().is('tr');
有几个问题:
- 在
table
标记之外有tr
标记——这是无效的HTMLdiv
不是正确的容器李>
- jQuery1.4真的过时了,
live
方法不受欢迎李>
属性的具有一个值,该值指向不存在的元素。可能它应该读为for=“p_scnt”
,而不是for=“p_scnts”
李>
前两个事件处理程序中存在代码重复李>
插入的模板HTML有错误:
- 关闭
和
标记顺序错误李>
- 输入的
id
属性与已经存在的元素具有相同的值——这在HTML中是不允许的,并且可能导致脚本的意外行为李>
- 此处出现了与
for
属性相同的问题李>
- 您可以更好地将模板HTML放在HTML文档中,例如
一个看不见的容器。这使它更容易管理
要防止在最后一行中已有空输入时添加行,可以使用以下测试:
$('#p_scents .iptArea').last().val() === ''
以下是已更正的代码,其中还包括该测试:
$(函数(){
var uniqueId=1;
函数addRow(){
var html=$('#template>tbody').html().replace(/\$/g,uniqueId++);
$('#p#u scenets>tbody').append(html.trim());
返回false;
}
$(#addScnt')。单击(addRow);
$(文档).delegate('.iptArea',change',function(){
if($('#p#scents.iptArea').last().val()==''返回false;//不添加
返回addRow();
});
$(文档).delegate('.remScnt','click',函数(e){
$(this.parents('tr').remove();
返回false;
});
});代码>
这是无效的HTML。p\u scnts
,p\u scnt
,p\u scnts
。。。我想你需要决定用哪个名字。另外:id属性在文档中必须具有唯一的值。如果按id选择节点并有重复项,则会得到意外的结果。是的,我知道我知道原始代码不是我的,我只是稍微修改了一下。我将在以后它工作时这样做@你在用jQuery1.4吗?你至少应该。。。1.11hmm我不知道每次我尝试其他版本时它都不起作用@trincotI这样尝试,但它在第三行停止工作if($('input')。nest('tr')。next()。is('tr')==false){}
您不应该实际使用$('input')
,而是包含输入
的jQuery对象,您想在其中检查包含行之后是否有行。哇,谢谢,它工作正常如果可以的话,10/10会给您100万分。我将jQuery改为2.2.3,它仍然可以正常工作。很高兴听到这个消息。如果您已成功迁移到2.2.3,那么最好将对.delegate(a,b,c)
的调用替换为.on(b,a,c)
,这意味着您需要交换前两个参数。这样,您就拥有了最新jQuery版本的代码:-)我更改了。委托给。但它不起作用。我还必须更改其他内容吗?交换参数?我将更改后的代码添加到我的答案中,作为基于jQuery2.2.3的工作代码段。