我正在编写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开始时,它就会停止工作。
我一直试图解决这个问题几个小时,工作和非工作条件之间的唯一区别就是我能看到的网址。
任何人都可以了解这里发生的事情吗?
答案 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。)
希望这可以帮助有同样问题的人!