【发布时间】:2012-03-23 14:46:23
【问题描述】:
我想知道仅在特定页面上执行 java 脚本代码的最佳方法是什么。
假设我们有一个基于模板的网站,为内容设置重写规则,jquery 可用,它基本上看起来像这样:
<!DOCTYPE html>
<html>
<head>
<script src="script.js"></script>
</head>
<body>
...
include $content;
..
</body>
</html>
内容“信息”包含一个按钮,我们希望在点击时发生某些事情,当您将鼠标悬停在文本字段时,内容“警报”应该给我们一条消息。
什么是触发这些操作的最佳方法,而不会因为找不到对象而发生错误?
选项一:使用window.location.pathname
$(document).ready(function() {
if (window.location.pathname == '/info.php') {
$("#button1").click(function(){
//do something
})
}else if(window.location.pathname == '/alert.php'){
$("#mytextfield").hover(){
alert('message');
}
}
选项二:检查元素是否存在
$(document).ready(function() {
if ($("#button1").length > 0) {
$("#button1").click(function(){
//do something
})
}else if ($("#mytextfield").length > 0){
$("#mytextfield").hover(){
alert('message');
}
}
选项三:在加载的模板中包含脚本
//stands for itself
有没有更好的解决方案?还是我必须接受这些解决方案之一?
感谢您的经验、使用情况或与此主题相关的任何链接。
//编辑:
我可能选择了一个不好的例子,实际的代码应该是这样的:
mCanvas = $("#jsonCanvas");
mMyPicture = new myPicture (mCanvas);
myPicture 构造函数在哪里获取画布元素的上下文,如果 mCanvas 未定义,则会引发错误。
【问题讨论】:
-
一个好主意是只在需要它的页面上包含 javascript,并且
$(document).ready可能在一个页面上被多次调用,所以你应该在这里安全。 -
如果您使用 jQuery,则无需在分配事件处理程序之前检查元素是否存在:
$("someselector").click(...)会将点击处理程序应用于 零个或多个匹配“someselector”的元素 - 如果没有匹配,它不会给出错误。 -
@IanBishop :这是选项三 :) - >使用模板加载 js @nnnnnn :查看我的编辑,但你是对的,关于“仅”点击操作
-
考虑例如,您有 3 个这些“条件”包含。页面 A 使用 1,2。页面 B 使用 1。页面 C 仅使用 3。选项 1 给您留下一堆条件,检查您所在的页面以及要调用的函数。选项 2 给您留下了不同的条件来检查应该运行哪些脚本。此外,如果您的身份有冲突 - 您就有麻烦了。如果您说,提交表单的附加验证 - 您可以有两个 ID 为“提交”的按钮。但其中只有一个需要额外的验证。
-
另一种常见的方法是在 html 或 body 标签中添加类名。
标签: javascript jquery html performance