函数给出错误“div id”未定义。

时间:2016-07-21 10:25:13

标签: javascript html function

我有一个函数,它创建一个新的div,其功能输出为阿拉伯语。

function createListItem(value) {

            var iDiv = document.createElement('div');
            iDiv.id = 'block';
            iDiv.className = 'block' + i;
            var classString = iDiv.className.toString();
            document.getElementsByTagName('body')[0].appendChild(iDiv);
            iDiv.innerHTML = toArabic(value).toString() + " " + "<span class='remove' onclick=' removeDummy(" + classString + "); '>x</span>";
            i++;    
}

它用Id块#创建一个div,所以第一个是block0,第二个是block1,依此类推。

我想添加一个“删除”按钮,单击“x”将删除创建的div。我能够在removeDummy函数中提醒div名称,但它仍然会给出错误“block0被点头定义”。

删除功能:

function removeDummy(value) {

    var elem = document.getElementById(value);
    elem.parentNode.removeChild(elem);
    return false;

}

该功能一直工作,直到我给它的值,但它会删除最旧的div,所以我决定给它一个div id来删除那个被抄袭的那个。

什么可能导致此错误?为什么函数会使用alert而不是remove?

我怎么能解决这个问题?

提前致谢!

4 个答案:

答案 0 :(得分:1)

偶然发生一些错误:

首先:您创建的每个div都具有相同的ID但不同的classNames。这应该颠倒过来。将id视为您的个人ID,将类名视为工作。两个人不能拥有相同的身份,但他们可以拥有相同的工作。

iDiv.id = 'block' + i;
iDiv.className = 'block';

第二:目前你的删除按钮如下所示:

<span class='remove' onclick=' removeDummy(block1); '>x</span>

如果点击它,它会尝试调用removeDummy并将变量block1传递给它。如果您之前没有定义过block1,那么它将包含具有相同想法的元素。您需要将此值封装在' - s

"<span class='remove' onclick=' removeDummy('block" + i + "'); '>x</span>"

答案 1 :(得分:0)

是的,你没有递增元素的[id]

[id]对于页面上的一个元素是唯一的,className可以在多个元素之间共享

我更喜欢使用document.querySelector()#代表ID,.代表className,或者两者都不选择标记。

答案 2 :(得分:0)

更改:** iDiv.setAttribute(&#34; id&#34;,&#34; block&#34;); **

function createListItem(value){

        var iDiv = document.createElement('div');
        iDiv.setAttribute("id","block");
        iDiv.className = 'block' + i;
        var classString = iDiv.className.toString();
        document.getElementsByTagName('body')[0].appendChild(iDiv);
        iDiv.innerHTML = toArabic(value).toString() + " " + "<span class='remove' onclick=' removeDummy(" + classString + "); '>x</span>";
        i++;    

}

答案 3 :(得分:0)

您将所有div id设置为“阻止”尝试更改以下两行:

iDiv.id = 'block';
iDiv.className = 'block' + i;

对此:

iDiv.id = 'block' + i;
iDiv.className = 'block';