Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery不是';识别一个#id选择器似乎取决于URL_Javascript_Jquery - Fatal编程技术网

Javascript JQuery不是';识别一个#id选择器似乎取决于URL

Javascript JQuery不是';识别一个#id选择器似乎取决于URL,javascript,jquery,Javascript,Jquery,我正在编写一个RubyonRails应用程序。以下jQuery代码包含在index.html.erb文件的head标记中,该文件是站点上所有页面的模板 <script> $(document).ready(function() { $("#select_mailshot").click(function () { alert('mailshot'); document.location.href = "/products/1"; });

我正在编写一个RubyonRails应用程序。以下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>

$(文档).ready(函数(){
$(“#选择_邮件快照”)。单击(函数(){
警报(“邮件快照”);
document.location.href=“/products/1”;
});
$(“#选择_博客”)。单击(函数(){
警报(“博客”);
document.location.href=“/messages”;
});
$(“#选择_联系人”)。单击(功能(){
警报(“联系”);
document.location.href=“/contacts/1”;
});
});
(警报步骤在此处用于调试)

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个按钮

当点击任何一个按钮时,一切正常

当从(通过中间按钮)点击任何按钮时,一切正常

启动时,所有设备停止工作(警报不会触发)。事实上,从一开始,它就停止工作了

我已经尝试解决这个问题好几个小时了,就我所见,工作和非工作条件之间的唯一区别就是url


有人能解释一下这里发生了什么吗?

这个javascript是内联的吗


如果不是,那么该链接可能是相对的,因此当您尝试从messages/40加载它时,您需要。/script.js。另一种解决方案是使用绝对URL()或虚拟URL(/script.js)。

firebug告诉您什么?页面上有javascript错误吗?如果是,它们是什么?由于cherouvim和digitaljoel,您是否确定jQuery库正确地包含在更深的页面中(即它是相对路径?

这是由于包含了相对于当前URL的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属性中的额外“/”),一切都按预期工作

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


感觉有点傻,但这是一个很好的教训。

我用FaceBox创建模式覆盖,但我不明白为什么我会遇到同样的问题

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

对于任何有相同问题的人,我建议将click()代码移动到您所附加的HTML元素可见的位置

另外,我发现按ID选择确实比按类选择会带来更多的问题。我不知道为什么。(否,没有重复的ID。)


希望这能帮助有同样问题的人

javascript是内联的,但是到jQuery的链接是相对的,感谢Hintcheck检查错误日志是一个明显的步骤,而jQuery库是相对的,没有正确包含,谢谢。几天前我看到了同样的问题。更新:ID选择器的问题原来是FaceBox的工作方式。它实际上复制了div元素,这当然意味着最终会有重复的id。