我最近写了一些javascript代码,它基于一些XML填充了一个下拉列表,非常简单。问题是我必须编写类似的代码才能在不同的页面上执行几乎相同的操作。
因为代码几乎相同,所以我将大多数函数命名为相同,认为它们永远不会包含在同一页面中。但是,由于两个javascript文件最终都包含在同一个HTML页面中,因此出现了命名冲突。
当我不得不返回并更改名称时,我只需将first_或second_添加到方法的名称中。这是一种痛苦,对我来说似乎并不优雅。我想知道是否有更好的方法来解决javascript中的名称冲突?
答案 0 :(得分:6)
尝试各种库中使用的JavaScript module pattern(或名称空间)。
尝试干燥(不要重复自己),这样可以避免名称冲突。如果代码几乎相同,则最好通过创建可以处理这两种情况的函数来避免代码重复。该函数可以采用两个参数:填充下拉列表和使用哪些数据。这也有助于维护。
更新:我假设您从AJAX请求中获取XML。在这种情况下,您可以使用适当的参数创建动态匿名函数,以便在循环内进行回调。
答案 1 :(得分:1)
我会看看如何将两段代码(函数?)合并到一个函数中。如果你需要填充一个列表框,然后将列表框id传递给函数,那么你就不会硬编码只能在一个控件上运行...
我在我的火箭业务网站上做了这个,我在那里销售了具有不同延迟值的火箭发动机,但实质上,它们是相同的产品,只是一个不同的延迟值。
也许这可能会尝试解释我想说的内容......如果图像文件碰巧丢失,我会使用它,它将显示“无图像”图像来代替真实图像。
function goBlank(image)
{
if(image) {
var imgobj = document[image];
imgobj.src="/images/blank.png";
}
}
在这种情况下,您可以通过以下方式调用它:
<img src="/images/aerotech.png" name="header" onError="goBlank('header');">
如果您需要更多使用列表框之类的示例,请告诉我。也许甚至发布你的一些示例代码。
答案 2 :(得分:0)
另一个选项(如果可能)是将代码小心地绑定到元素本身。
e.g。
<input type="text" name="foo" id="foo" value="World" onchange="this.stuff('Hello ' + this.value);"/>
<script>
document.getElementById('foo').stuff = function(msg){
//do whatever you want here...
alert('You passed me: ' + msg);
};
</script>