one
次の方法を使用できます。
要素のイベントにハンドラーをアタッチします。ハンドラーは、要素ごとに最大1回実行されます。
$('.lastName').one('click', function(e){
$('#add_new',pupils_form).parent().before(pupils_row);
});
また、入力のハンドラーをバインドしているので、ハンドラーを関数の外に置くことができます。関数はそれ自体を呼び出して継続的に実行することに注意してください。ページの読み込み時にハンドラーを実行する場合は、イベントをトリガーできます。
$('.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);
})
data-*
属性を使用できます。次のことを試してください。
<input type='text' class='lastName' data-run='go'/>
$(document).on('focus', '.lastName', function(){
if ( $(this).data('run') == 'go') {
$('#add_new',pupils_form).parent().before(pupils_row);
$(this).data('run', 'stop')
}
})