JQuery没有识别#id选择器,似乎依赖于URL

时间:2009-03-17 21:27:18

标签: javascript jquery

我正在编写Ruby on Rails应用程序。以下jQuery代码包含在index.html.erb文件的head标记中,该文件是网站上所有页面的模板。

<script>
  $(document).ready(function() {
    $("#select_mailshot").click(function () {
      alert('mailshot');
      document.location.href = "/products/1";
    });
    $("#select_blog").click(function () {
      alert('blog');
      document.location.href = "/messages";
    });
    $("#select_contact").click(function () {
      alert('contact');
      document.location.href = "/contacts/1";
    });
  });
</script>

(警报步骤在那里进行调试)

index.html.erb中的以下html代码

<ul>
  <li id="select_mailshot">Mailshot</li>
  <li id="select_blog">Blog</li>
  <li id="select_contact">Contact us</li>
</ul>

目的是有效地创建3个按钮。

点击http://myurl.com/中的任何按钮时,一切正常。

点击http://myurl.com/messages中的任何按钮(通过中间按钮进入此按钮)一切正常

http://myurl.com/products/1开始时,它全部停止工作(警报不会触发)。事实上,当从http://myurl.com/anything/id开始时,它就会停止工作。

我一直试图解决这个问题几个小时,工作和非工作条件之间的唯一区别就是我能看到的网址。

任何人都可以了解这里发生的事情吗?

4 个答案:

答案 0 :(得分:4)

萤火虫告诉你什么?你在页面上有javascript错误吗?如果是的话,他们是什么?你确定jQuery库正确地包含在更深的页面中(即它是相对路径吗?)

答案 1 :(得分:1)

这是javascript内联吗?

如果没有,那么也许链接是相对的,所以当你尝试从messages / 40加载它时,你需要 ../ script.js 。另一种解决方案是使用绝对URL(http://myurl/script.js)或虚拟(/script.js)。

答案 2 :(得分:0)

感谢cherouvim和digitaljoel。

这是因为相对于当前网址包含了javascript文件。

以下内容包含在头标记

<script type="text/javascript" src="javascripts/jquery-1.3.2.js"></script>

我把它改成了

<script type="text/javascript" src="/javascripts/jquery-1.3.2.js"></script>

(注意src属性中的额外“/”),一切都按预期工作。

我在检查服务器和浏览器中的错误日志后解决了这个问题。

感觉有点愚蠢,但教训很好。

答案 3 :(得分:0)

我使用FaceBox创建模态叠加,我无法弄清楚为什么我遇到同样的问题。

我发现侦听器在可见之前没有附加到HTML元素。 (如果我查看了源代码,那么这些项目是可用的,但jQuery似乎不会附加一个监听器,直到它可见。)

对于遇到同样问题的人,我建议将你的click()代码移动到你所附加的HTML元素可见的位置。

另外,我发现通过ID选择确实比课堂提供更多问题。我不知道为什么。 (不,没有重复的ID。)

希望这可以帮助有同样问题的人!