Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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 为同一类中的所有图元单击一次_Javascript_Jquery - Fatal编程技术网

Javascript 为同一类中的所有图元单击一次

Javascript 为同一类中的所有图元单击一次,javascript,jquery,Javascript,Jquery,我正在尝试编写代码,将自动向窗体添加另一行。对于lastName类的每个表单输入,它应该只执行一次 下面的代码可以工作。但它不止执行一次。我希望代码对于lastName类的每个表单输入只执行一次。我对jquery和javascript缺乏经验,因此我不确定如何解决这个问题 function AutoAdd() { $('.lastName').focus(function(e){ $('#add_new',pupils_form).parent().before(pupi

我正在尝试编写代码,将自动向窗体添加另一行。对于lastName类的每个表单输入,它应该只执行一次

下面的代码可以工作。但它不止执行一次。我希望代码对于lastName类的每个表单输入只执行一次。我对jquery和javascript缺乏经验,因此我不确定如何解决这个问题

    function AutoAdd() {
    $('.lastName').focus(function(e){
    $('#add_new',pupils_form).parent().before(pupils_row);

    AutoAdd();
    });
    };
    AutoAdd();
您可以使用以下方法:

将处理程序附加到元素的事件。每个元素最多执行一次处理程序

另外,当您为输入绑定处理程序时,您可以将处理程序放在函数外部,请注意,您的函数会调用自身并连续运行。如果要在页面加载时执行处理程序,可以触发事件:

$('.lastName').focus(function(e){
      $('#add_new',pupils_form).parent().before(pupils_row);
}).focus()

对于动态生成的元素,应委托事件,请尝试以下操作:

$(document).on('focus', '.lastName', function(){
     $('#add_new',pupils_form).parent().before(pupils_row);
})
<input type='text' class='lastName' data-run='go'/>
您可以使用
data-*
属性,请尝试以下操作:

$(document).on('focus', '.lastName', function(){
     $('#add_new',pupils_form).parent().before(pupils_row);
})
<input type='text' class='lastName' data-run='go'/>
您可以使用以下方法:

将处理程序附加到元素的事件。每个元素最多执行一次处理程序

另外,当您为输入绑定处理程序时,您可以将处理程序放在函数外部,请注意,您的函数会调用自身并连续运行。如果要在页面加载时执行处理程序,可以触发事件:

$('.lastName').focus(function(e){
      $('#add_new',pupils_form).parent().before(pupils_row);
}).focus()

对于动态生成的元素,应委托事件,请尝试以下操作:

$(document).on('focus', '.lastName', function(){
     $('#add_new',pupils_form).parent().before(pupils_row);
})
<input type='text' class='lastName' data-run='go'/>
您可以使用
data-*
属性,请尝试以下操作:

$(document).on('focus', '.lastName', function(){
     $('#add_new',pupils_form).parent().before(pupils_row);
})
<input type='text' class='lastName' data-run='go'/>

这里有一个无限的调用堆栈。您的
AutoAdd
将一次又一次地调用自己,并且…

您在这里有一个无限的调用堆栈。您的
AutoAdd
将一次又一次地调用自己,并且…

为了避免在新创建的行上运行
AutoAdd
函数,您可以使用jQuery的
on()
-函数代替
focus()


on()
实际上附加到表单(您需要更改选择器
#表单
)并侦听从所述表单的子级冒出的事件。

为了避免在新创建的行上运行
自动添加
函数,您可以使用jQuery的
on()
-函数而不是
焦点()



on()
实际上附加到表单(您需要更改选择器
#表单
)并侦听从所述表单的子级冒出的事件。

为什么在焦点回调函数中调用AutoAdd函数?我没有经验,我意识到这不好。我试图让它在新添加的行中标识lastname类,而这是唯一的方法。这是我尝试过的唯一有效的方法。为什么在焦点回调函数中调用AutoAdd函数?我没有经验,我意识到这不好。我试图让它在新添加的行中标识lastname类,而这是唯一的方法。这是我试过的唯一有效的方法。谢谢。我之前试过这个,但不完全有效。问题是添加的行包含一个新的lastName类。这段代码似乎不适用于新行。很抱歉,但我不确定使用上述所有内容的正确顺序。如果我同时使用这三段代码,它就不起作用了。我也尝试过其他组合,但也不起作用。请告诉我哪里可能出错?@RicardoCollins他们是三个不同的处理程序,您应该只使用其中一个,尝试最后一个:)如果我只单独使用最后一个,则不会将操作限制为类的每个实例一次。如果我遗漏了一些明显的东西,我很抱歉-我还没有足够的知识来真正理解正在发生的事情:-)@RicardoCollins您想用
lastName
类分别或全部为每个元素绑定一次事件吗?谢谢。我之前试过这个,但不完全有效。问题是添加的行包含一个新的lastName类。这段代码似乎不适用于新行。很抱歉,但我不确定使用上述所有内容的正确顺序。如果我同时使用这三段代码,它就不起作用了。我也尝试过其他组合,但也不起作用。请告诉我哪里可能出错?@RicardoCollins他们是三个不同的处理程序,您应该只使用其中一个,尝试最后一个:)如果我只单独使用最后一个,则不会将操作限制为类的每个实例一次。如果我遗漏了一些明显的东西,我很抱歉——我还没有足够的知识来真正理解正在发生的事情:-)@RicardoCollins你想用
lastName
类分别或全部为每个元素绑定一次事件吗?我最初尝试了下面Raminson提出的代码,但它对jquery添加的新行无效。这是我尝试过的唯一一个对新添加的行有效的代码。我意识到这是错误的,我正试图想出一个可行的解决方案。谢谢你的提示!试试@Raminson的更新答案,$。我最初尝试了下面Raminson提出的代码,但它在jquery添加的新行上不起作用。这是我尝试过的唯一一个对新添加的行有效的代码。我意识到这是错误的,我正试图想出一个可行的解决方案。谢谢你的提示!试试@Raminson的最新答案,$。on将是一个有效的答案