将“This”放入Javascript中的命名空间中
Getting "This" into a namespace in Javascript
我相信这应该是一个简单的问题,但我仍在学习,所以在这里:
我有一些代码可以在单击时运行函数以将被单击的元素的 ID 分配给变量,但我不知道如何在不创建全局变量的情况下将"this.id"值传递给命名空间(我认为这很糟糕)。
<script>
fsa = (function() {
function GetTemplateLoc() {
templateId = document.activeElement.id;
alert(templateId + templateId2);
}
return {
GetTemplateLoc: GetTemplateLoc,
}
})();
//call the functions
$(document).on('click', '.template', function () {
fsa.GetTemplateLoc();
});
</script>
和带有随机图片的 HTML:
<img id="template-1" class="template" src="http://fc02.deviantart.net/fs70/f/2010/028/c/b/cb21eda885b4cc6ee3f549a417770596.png"/>
<img id="template-2" class="template" src="http://fc02.deviantart.net/fs70/f/2010/028/c/b/cb21eda885b4cc6ee3f549a417770596.png"/>
以下方法有效:
var fsa = (function() {
function GetTemplateLoc() {
var templateId = this.id;
alert(templateId);
}
return {
GetTemplateLoc: GetTemplateLoc,
}
})();
//call the functions
$(document).on('click', '.template', fsa.GetTemplateLoc);
jQuery通常调用你作为事件处理程序传递的函数,this
设置为与事件关联的DOM对象。
在这种情况下,它将调用GetTemplateLoc()
,并将this
设置为.template
元素,因此您可以直接在函数中使用this
,而无需传递任何参数。
重要提示:始终使用 var
声明变量。JavaScript 没有变量的自动函数局部范围,即每个声明没有var
的变量都是全局的,无论你在哪里声明它。换句话说,忘记var
算作错误。
试试这个:你可以直接使用this.id
来传递点击元素的id,其中this
引用被点击元素的实例。
<script>
fsa = (function() {
function GetTemplateLoc(templateId ) {
//templateId = document.activeElement.id;
alert(templateId + templateId2);
}
return {
GetTemplateLoc: GetTemplateLoc,
}
})();
//call the functions
$(document).on('click', '.template', function () {
fsa.GetTemplateLoc(this.id);
});
</script>
如果你能够在GetTemplateLoc
函数中使用jQuery,你可以做这样的事情:
var fsa = (function() {
function GetTemplateLoc($trigger) {
var templateId = $trigger.attr('id'),
templateId2 = $($trigger.siblings('.template')[0]).attr('id');
alert(templateId + ' ' + templateId2);
}
return {
GetTemplateLoc: GetTemplateLoc,
}
})();
$(document).on('click', '.template', function () {
fsa.GetTemplateLoc($(this));
});
你可以GetTemplateLoc
设置为期望jQuery对象作为参数($trigger
开头的美元符号可以用来区分它是jQuery对象而不是任何其他数据类型,这不是必需的,但有时可以帮助澄清事情)。
templateId
将存储单击的图像 ID 的值,templateId2
将存储其他图像的 ID 的值。我还在警报中的两个变量之间添加了一个空格。
如果你不能在GetTemplateLoc
中使用jQuery,你可以做这样的事情:
var fsa = (function() {
function GetTemplateLoc(trigger) {
var templateId = trigger.id;
var templateId2 = trigger.nextElementSibling == null ? trigger.previousElementSibling.id : trigger.nextElementSibling.id;
alert(templateId + ' ' + templateId2);
}
return {
GetTemplateLoc: GetTemplateLoc,
}
})();
这一次,触发事件的.template
被传递到GetTemplateLoc
,但这次它不是jQuery对象。 templateId
分配给触发器的 ID,然后在三元中分配templateId2
。首先,检查trigger
的nextElementSibling
以查看它是否null
。如果是,我们知道trigger
是两个.template
要素中的第二个。因此我们可以templateId2
设置为trigger
以前的兄弟姐妹的ID。如果trigger
的nextElementSibling
不是null
,那么我们知道trigger
是第一个模板,我们用 nextElementSibling
的 ID 填充templateId2
。这种确切的方法仅适用于两个.template
,如果有更多,则需要一些额外的/不同的逻辑,可能需要检索所有.template
ID,然后循环访问它们以将它们添加到警报消息中。希望这有帮助。
- 在javascript中使用命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 如何使用javascript命名空间
- 转换自的JavaScript命名空间
- 什么's当前命名空间/类中JavaScript子命名空间/类的语法
- 在Firebug控制台中监视javascript命名空间变量
- 用自定义javascript全局命名空间替换窗口
- 怎么了?通过字符串定义 JavaScript 命名空间
- Javascript 命名空间/最佳实践
- IE中的Javascript命名空间抛出错误
- 处理此命名空间 JavaScript 结构的最佳方法是什么?
- 将 JavaScript 封装在命名空间中
- 将索引值传递给javascript命名空间数组
- JavaScript风格:我应该将这些东西中的哪些作为参数传递给我的命名空间函数
- 如何正确设置 JavaScript 命名空间和类
- 创建命名空间 Javascript 单例类的对象
- Xmlns 命名空间 JavaScript 删除
- 在我的命名空间JavaScript中使用this关键字
- 命名空间Javascript中的递归函数
- 构造函数-在简单的命名空间- Javascript