jQuery .on?在Ajax之后操作DOM

时间:2012-07-09 16:19:48

标签: jquery

  

可能重复:
  Bind jQuery UI autocomplete using .live()

我似乎无法弄清楚这一点。我相信我将不得不使用.load()或.on(),但我无法弄清楚如何让它们中的任何一个工作。

所以我有一个有3行的表。当用户填写3行时,我想为他们提供更多。

一旦他们填写了最后一行,就会调用这个脚本。

function addNewRow(id)
{
    var qty = $('#qty' + id).val();
    if (qty > 0)
    {
        $('#quickaddtable').append('<?php echo createRow(($i+1)); ?>');
    }
}

问题是我正在使用自动完成功能,而对于新创建的行,它无法正常工作。我知道我需要重新加载DOM,但我只是迷失在如何轻松做到这一点。

$(function(){  

    $(".id").autocomplete({ 
            //My Code
    });  
}); 

我确信这是一个简单的答案,但几乎所有的例子都显示.on(“click”,...)

2 个答案:

答案 0 :(得分:0)

Neal得到了它。我看错了。

我需要在自动完成时使用.on而不是addNewRow函数。

所以我改变了这个

$j(function(){  

    //attach autocomplete  
    $j(document).on("keyup.autocomplete", '.autocomplete', function(){
        $j(this).autocomplete({
                   //My Code
            });
    });

})

感谢您的帮助。我花了好几个小时看着这个,并且在几分钟内,你们回答了再次感谢你们。既然尼尔没有发表答案,我有什么方法可以给他信任吗?

答案 1 :(得分:-1)

这里的问题是当使用$('.id')选择器时,新行还不存在。添加更多行时,匹配“.id”的新元素不会绑定到之前调用的方法。

我可能只是在插入后重新绑定,而不是使用绑定到文档($(document).on('event'))。所以它会是这样的:

$('#quickaddtable').append( ... );
$('.id').autocomplete("destroy");
$('.id').autocomplete({ ... });