Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查是否存在<;tr>;在下面_Javascript_Jquery_Html - Fatal编程技术网

Javascript 检查是否存在<;tr>;在下面

Javascript 检查是否存在<;tr>;在下面,javascript,jquery,html,Javascript,Jquery,Html,我有一段代码,每次我写东西时,它都会给我添加一个额外的输入。 但我有一个问题,即使输入中已经写了一些东西,并且我修改了它,它也会添加一个新的输入。 但我想禁用它 我尝试了一个if检查,但我对html不是很熟悉,所以我不知道如何执行这个检查 有人能告诉我如何检查我正在更改的输入框下面是否有对象吗 谢谢 $(函数(){ var scntDiv=$('p#u scents'); 变量i=$('#p#p').size()+1; $('#addScnt').live('click',function()

我有一段代码,每次我写东西时,它都会给我添加一个额外的输入。 但我有一个问题,即使输入中已经写了一些东西,并且我修改了它,它也会添加一个新的输入。 但我想禁用它

我尝试了一个if检查,但我对html不是很熟悉,所以我不知道如何执行这个检查

有人能告诉我如何检查我正在更改的输入框下面是否有对象吗

谢谢

$(函数(){
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
    标记——这是无效的HTML
    div
    不是正确的容器
  • 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的工作代码段。