html,js-如何限制元素"范围“-命名空间
html, js - how to limit elements "scope" - namespaces
在上一次会议期间,我越来越多地看到以下情况。
开发人员A创建一个功能。假设是一个自动完成输入。为了简单起见,我们假设没有使用任何框架,html和js在同一个文件上。该文件看起来是这样的(让我们也使用一个jquery-不太容易键入):
<!-- autocomplete something.html file -->
.........................................
<input id="autocomplete" type="text" />
<script type="text/javascript">
$('#autocomplete').change(function() {
// Do lots of things here -> ajax request, parsing, etc.
});
</script>
.........................................
现在,开发人员B看到了这个功能,并说:"哦,很好的功能,我可以在我的部分中使用它,我会在顶部放一个,在底部放一个——因为页面很长"。
他做了一个ajax调用来获取html文件(这很重要,我说的是像这样加载的功能,而不是为其他部分重写的功能),并将其包含在他需要的地方。
现在。。。问题第一个自动完成有效,第二个无效(因为是由id选择的)。
解决方法是修改并使用一个类。一切都很好,除非其他人(或他自己,或其他什么人)将同一个类用于完全不同的东西。
如果你可以将脚本用作声明它的文件的"范围"(我知道这不是正确的措辞,找不到更好的),这一切都可以避免。
注:这是一个理论问题。对于每一种特定的情况,都可以找到解决方案,但为这种场景定义某种名称空间将解决整个类别的问题。
这是如何实现的?
只要您正在访问DOM,我看到的唯一方法就是使用"旧"内联事件:
<!-- autocomplete something.html file -->
.........................................
<input onchange="autocomplete_change();" type="text" />
<script type="text/javascript">
function autocomplete_change() {
// Do lots of things here -> ajax request, parsing, etc.
};
</script>
...........
现在函数名称不能由开发人员B使用。但是当访问DOM时,总会有某种限制。
但是,当通过Script创建输入时,您可以将处理程序直接绑定到元素:
<script>
var input = $('<input type="text"/>');
input.change(function() {
// Do lots of things here -> ajax request, parsing, etc.
});
document.body.appendChild(input[0]);
</script>
相关文章:
- 在javascript中使用命名空间
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 如何使用javascript命名空间
- js命名空间和变量范围
- html,js-如何限制元素"范围“-命名空间
- 转换自的JavaScript命名空间
- 命名空间与自调用函数
- 什么's当前命名空间/类中JavaScript子命名空间/类的语法
- 无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt
- jQuery命名空间和使用“;这个“;
- 在Firebug控制台中监视javascript命名空间变量
- jQuery事件命名空间是否可以包含破折号
- 用自定义javascript全局命名空间替换窗口
- 如何在Typescript中导出具有其他名称的命名空间
- 从html文件中的脚本标记调用非全局命名空间函数
- 短范围命名空间数组是什么意思
- 命名空间和词法范围之间的关系是什么
- c++ /CX:在命名空间范围定义公共void
- Javascript库开发范围和命名空间