function labelOnClick () {
function makeDivId(id) {
return id + "_div";
};
var div = this.getElementById(makeDivId(this.id));
if (div) {
div.parentNode.removeChild(div);
} else {
div = document.createElement("div");
div.innerHTML = "welcome";
div.id = makeDivId(this.id);
this.appendChild(div);
}
}
<label id="1" onclick="labelOnClick()" > BROWSER </label>
<label id="2" onclick="labelOnClick()"> GAMING CONSOLE </label>
在上面的示例中,我尝试在单击标签时创建div
元素,并在再次单击标签时删除创建的div
元素,但它不起作用。
答案 0 :(得分:4)
您的代码中有几个问题:
在事件处理函数label onclick="..."
内部分配事件处理程序内联(this
)时,将指向全局对象(window
)。您可以将this
作为参数传递给函数。
如果没有找到任何元素,某些浏览器会在将getElementById()
的结果分配给变量时失败(如果我错了,有人会纠正我)。
这样的事情会起作用:
<script>
function labelOnClick (me) {
var makeDivId=function (id) {
return id + "_div";
};
var div;
if (document.getElementById(makeDivId(me.id))) {
div=document.getElementById(makeDivId(me.id));
div.parentNode.removeChild(div);
} else {
div = document.createElement("div");
div.innerHTML = "welcome";
div.id = makeDivId(me.id);
me.appendChild(div);
}
}
</script>
<label id="1" onclick="labelOnClick(this)" > BROWSER </label>
<label id="2" onclick="labelOnClick(this)"> GAMING CONSOLE </label>
答案 1 :(得分:1)
我的建议是不使用javascript添加div,而是在点击时更改div标签的可见性样式属性。
function labelOnClick () {
function makeDivId(id) {
return id + "_div";
};
//var div = this.getElementById(makeDivId(this.id));
if (document.getElementById("divID").style.visibility == "visible") {
document.getElementById("divID").style.visibility = "hidden";
} else {
document.getElementById("divID").style.visibility = "hidden";
}
}
<label id="1" onclick="labelOnClick()" > BROWSER </label>
<label id="2" onclick="labelOnClick()"> GAMING CONSOLE </label>
答案 2 :(得分:1)
您正在尝试使用“this”关键字代替“document”,这不起作用,因为“this”指向labelOnClick函数。
function labelOnClick(e)
{
function makeDivId(id)
{
return id + "_div";
};
var div = document.getElementById(makeDivId(this.id));
if (div)
{
div.parentNode.removeChild(div);
}
else
{
div = document.createElement("div");
div.innerHTML = "welcome";
div.id = makeDivId(this.id);
var element = e.target;
element.parentNode.insertBefore(div, element.nextSibling);
}
}
<label id="1" onclick="labelOnClick(event)" > BROWSER </label>
<label id="2" onclick="labelOnClick(event)"> GAMING CONSOLE </label>
我写这个假设你使用的东西支持事件对象的“target”属性(例如不是Internet Explorer)。如果您需要跨浏览器支持,可以手动执行或使用jQuery或Prototype等框架。
编写原始代码的方式,我假设你想要每个标签一个div,我猜测定位(紧跟标签后)。