制作 JavaScript 代码适用于任何元素
Making a JavaScript code works with any element
document.getElementById("but").onclick = showDropDown;
function showDropDown(e) {
document.getElementById("but").onclick = function() {};
if (e.stopPropagation) e.stopPropagation(); // W3C model
else e.cancelBubble = true; // IE model
document.getElementById("window").style.display = "inline-block";
document.onclick = function(e) {
var ele = document.elementFromPoint(e.clientX, e.clientY);
if (ele == document.getElementById("but")) {
hideDropDown();
return;
}
do {
if (ele == document.getElementById("window")) return;
} while (ele = ele.parentNode);
hideDropDown();
};
}
function hideDropDown() {
document.onclick = function() {};
document.getElementById("window").style.display = "none";
document.getElementById("but").onclick = showDropDown;
}
<input id="but" type="button" value="pressMe" />
<div id="window" style="display:none">popup</div>
演示:http://jsfiddle.net/nazym/
我试图使用变量而不是指定元素的名称使 JavaScript 代码动态化,但我做不到。它总是返回错误。我想将它与不同的元素联系起来。
更新
我想用变量替换 JavaScript 代码中元素的id
,以便我可以将其与任何元素一起使用。我试图这样做,但失败了。基本上,我想使用变量而不是元素的id
,并以某种方式再次将其链接到元素。
改用参数:
function showDropDown(element, e) {
element.onclick = function() {};
// ....
hideDropDown(element);
}
你会给元素它的onclick事件处理程序,如下所示:
document.getElementById('but').onclick = function(event) {
showDropDown(this, event);
};
演示:http://jsfiddle.net/xNSZm/
将代码更改为
var showDropdown = function(e) { ... };
document.getElementById("but").onclick = showDropDown;
换句话说,在赋值函数之前将函数存储在变量中。
在你的代码中:
> document.onclick = function(e){
在支持 IE 事件模型的浏览器中,e
将是未定义的。要适应这些浏览器,您可以使用:
e = e || window.event;
要查找单击的元素,而不是:
> var ele = document.elementFromPoint(e.clientX, e.clientY);
你可以做:
var ele = e.target || e.srcElement;
它将在比elementFromPoint更多的浏览器中工作,因此应该更可靠,更快。
相关文章:
- 从dom中删除任何元素后,Touchmove事件停止触发
- 制作 JavaScript 代码适用于任何元素
- jQuery:append()不是't在选择器中插入任何元素
- 与任何元素的 .innerHTML 属性匹配的 JavaScript 正则表达式
- 观察任何元素何时更改
- .scrollInto查看带有数据标记的任何元素,或使用类对带有数据标签的内容进行分段
- 以elementsByClassName数组的任何元素为目标
- 如何访问迭代模板中的任何元素
- 检查是否有任何元素具有焦点
- 如何在没有任何元素id的情况下检索表中的文本内容
- 正在Jquery中的列表中不包含任何元素的列表中删除
- 为什么这不返回任何元素
- 如何获取任何元素的渲染上边距
- Div 高度不会在附加任何元素时增加
- 在鼠标悬停/鼠标出类中的任何元素时更改元素 ID
- 使滑动水平线上的任何元素居中
- 选择器“app”与任何元素都不匹配
- 在网页上单击任何元素时触发 js 函数
- JQuery - 使我悬停在包含某个类的任何元素的内容变暗
- 有没有办法使 ID 对于页面上的任何元素而不是文档的唯一性