使用Jquery和Delegate()的奇怪Javascript行为

使用Jquery和Delegate()的奇怪Javascript行为,javascript,jquery,Javascript,Jquery,我在一个页面上成功地使用了一些javascript,但在另一个页面上不起作用。我将块从一个文件复制到另一个文件,但它似乎根本没有附加事件。当我在加载页面后从Chrome或Firefox的控制台运行复制的块时,它工作正常。代码块前后的所有javascript都正常工作。只是这一点点 在一些测试之后,我添加了一个警报“test”;到代码块上方的行。警报弹出后,代码块将运行。这是除了使用控制台手动添加它之外的唯一实例。我想知道这是否是空白或制表符的问题?我只需要一双独立的眼睛或额外的想法,我可以做什么

我在一个页面上成功地使用了一些javascript,但在另一个页面上不起作用。我将块从一个文件复制到另一个文件,但它似乎根本没有附加事件。当我在加载页面后从Chrome或Firefox的控制台运行复制的块时,它工作正常。代码块前后的所有javascript都正常工作。只是这一点点

在一些测试之后,我添加了一个警报“test”;到代码块上方的行。警报弹出后,代码块将运行。这是除了使用控制台手动添加它之外的唯一实例。我想知道这是否是空白或制表符的问题?我只需要一双独立的眼睛或额外的想法,我可以做什么,使这项工作。这种警觉的行为很奇怪

 $(".rating").delegate("li","click",function(){
     var res = $(this).parent().attr('id');
     res = res.split("-");
     var resid = res[1];
     var classer = $(this).attr("class");
     var pdata = {'id':resid,'vote':classer};
     $.post('http://www.example.org/ec/ajax/vote',pdata);
     $(this).parent().children().removeClass("current").removeClass("clicked");
     $(this).addClass('clicked');
     return false;
});
正如我提到的,代码本身在其他页面上工作得很好,从控制台,以及在我添加警报时。这让我觉得这与javascript文件和/或格式有关。如果你有想法,我将不胜感激

根据要求,下面是这个javascript应该影响的HTML

<ul class="rating" id="rate_9">
 <li class="star1"><a title="Rate 1 Star Out Of 5" class="one-star" href="#">1</a></li>
 <li class="star2"><a title="Rate 2 Stars Out Of 5" class="two-stars" href="#">2</a></li>
 <li class="star3"><a title="Rate 3 Stars Out Of 5" class="three-stars" href="#">3</a></li>
 <li class="star4 current"><a title="Rate 4 Stars Out Of 5" class="four-stars" href="#">4</a></li>
 <li class="star5"><a title="Rate 5 Stars Out Of 5" class="five-stars" href="#">5</a></li>
</ul> 
补充说明: 我没有提到我试图影响的内容在最初隐藏在页面上的选项卡中。我确实移动了块,使其在显示后发生,但这并没有改变任何事情。

也许setTimeout解决方案会有所帮助。将代码包装到函数中,然后以零超时调用它:

var f = function(){
    $(".rating").delegate("li","click",function(){...[etc]...});
}

$(document).ready( function(){
    other();
    stuff();
    setTimeout(f,0);
});

在中有一些关于这种方法的讨论。

我没有明确提到,而且应该提到的是,受影响的html代码是通过ajax调用的。因此,它是在初始javascript已经运行之后加载的。这适用于我在页面上使用的所有其他javascript,包括滚动弹出窗口等,但不适用于此

然而,我将这段代码移到了ajax加载的HTML中,它当时运行得很好


我不知道我的其他代表团为什么工作,但这一个没有。它们中的许多都有相同的情况,即在它们影响的代码出现在页面上之前被加载,但它们工作正常。

该警报听起来像是一种定时依赖。此代码是否在.ready函数中执行?@Marcel控制台中没有显示任何错误消息,单步执行代码也没有帮助显示任何内容@Mike它是在.ready函数中执行的。你是在.ready处理程序中执行代码的吗?@jAndy是的,我是。不管我把块放在ready函数的什么地方,它之前和之后的所有代码,还有大量代码,都正常工作?触发doc ready时,页面上是否有.rating还有,lis家长的id是什么?等等。我猜如果在另一个页面上工作,页面上的HTML可能会导致问题。我肯定觉得这可能是正确的,但它似乎不起作用。