jquery - 为什么我在这种情况下需要live()?

时间:2010-09-13 15:39:18

标签: javascript jquery bind live autosuggest

我有点奇怪的情况。我理解live()和bind()函数的前提,但在我认为我不需要它们的情况下,我似乎就是这样做的。我会解释一下。

我在jquery中做了一个autosuggest。我在页面顶部添加了autosuggest.js。然后我有一个输入字段。

JS的基础可以解决:

$(".autosuggest").keyup(function()
{
}

这个工作 - 在keyup上,我的函数按预期执行等 - 我不需要使用live()或bind(),因为输入字段在get get go页面上...

现在..我还制作了一个'明星评价'esque脚本。 我有各种

  • 元素(都是样式化的),并且在悬停时它们会被重新设置...

     $('.rating li').mouseover(function() {
    }
    

    不起作用,YET

     $('.rating li').live('mouseover',function() {
    }
    

    DOES。

    为什么我需要在这种情况下使用'live',当我不在autosuggest的情况下?

    由于

  • 4 个答案:

    答案 0 :(得分:2)

    我能想象的唯一可能导致这种情况的是缺乏domready事件。这应该有效:

    $(function () {
        $('.rating li').mouseover(function() {
        }
    });
    

    答案 1 :(得分:1)

    .ratings li无法正常工作时,.mouseover()尚未解析。

    您可以将其包装在$(document).ready(function() {...});中或使用.live()(这将为脚本中当前解析的任何内容以及将来添加的任何元素创建绑定。)

    答案 2 :(得分:0)

    你把

    $('.rating li').mouseover(function() {
    }
    
    放在$(文件).ready(function(){....}?

    即使您包含.js文件,如果未加载页面中的元素('rating li'),也不会进行绑定。

    答案 3 :(得分:0)

    没有看到更多的代码,很难肯定地说。但我的猜测是你的脚本在页面加载完成之前运行。尝试通过调用$(document).ready(...)来包装绑定(以及依赖于特定dom元素的任何其他内容)。

    类似的东西:

    $(document).ready( function() {
        $('.rating li').mouseover(function() {
           // whatever
        });
    
        $(".autosuggest").keyup(function() {
           // whatever else
        });
    });
    

    如果不是这样,那么发布更多代码,我们将进一步挖掘。

    祝你好运。