javascript - 由 javascript 创建的 HTML5 拖放元素 :

标签 javascript html drag-and-drop generated

当我尝试拖放通常由 html 创建的元素时,一切正常,但是当我尝试拖放由 javascript 生成的元素时,会返回此错误:

Uncaught TypeError: Cannot read property 'parentNode' of null

我的代码: 用于拖放的js:

var id1;
var name;
function drag(ev) {
    name = document.getElementById(ev.target.id).parentNode.id;
    ev.dataTransfer.setData("text", name);
    id1 = document.getElementById(name).parentNode.id;
}
function drop(ev) {
    var id2 = ev.target.id;
    if(id1 === id2 + '1'){
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        ev.target.appendChild(document.getElementById(data));
        //Add info to arrays
        holders["\"" + id2 + "\": ["].push("{\"place_holder\":\"" + id2 + "\", \"name\":\"" + name + "\"}", ", ");
    }
}

function allowDrop(ev) {
    ev.preventDefault();
}

由 javascript 生成的 html 示例:

<div id="screen">
    <div id="menu_items" ondrop="drag(event)" ondragover="allowDrop(event)"></div>
    <div id="items1" ondrop="drag(event)" ondragover="allowDrop(event)"></div></div>
<div id="options">
    <div class="menu_items1">
        <div id="m_div_img10" class="img0" draggable="true" ondragstart="drag(event)">                  <img src="./images/example.jpg" alt="example.jpg">
            <span class="tooltip"><img src="./images/tip.png"></span></div><div id="m_div_img21" class="img1" draggable="true" ondragstart="drag(event)">
            <img src="./images/example.jpg" alt="example.jpg">
                <span class="tooltip">
            <img src="./images/tip.png">
        </span>
    </div>
    </div>
    <div class="items1"></div>
</div>

生成html的方式示例:

var items = document.createElement('div');
items.id = "options";
document.getElementsByTagName('body')[0].appendChild(items);
var innerDivElem = document.createElement('div');
.
.
.
innerDivElem.id = obj[i][t].name + t;
innerDivElem.className = "img" + t;
innerDivElem.draggable='true';
innerDivElem.setAttribute('ondragstart', 'drag(event)');
inContainerDiv.appendChild(innerDivElem);

最佳答案

这个:

innerDivElem.setAttribute('ondragstart', 'drag(event)');

给你这个:

<div ondragstart="drag(event)"></div>

这可能会向 drag() 函数发送未定义的 event 变量。

由于您已经在使用 JavaScript,因此请以 JavaScript 方式分配事件。

innerDivElement.ondragstart = function(e){
    drag(e);
}

或者更好:

innerDivElement.addEventListener( "dragstart" , function(e){
    drag(e);
});

乍一看,这可能是你的问题,希望它有帮助:)

关于javascript - 由 javascript 创建的 HTML5 拖放元素 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748654/

相关文章:

javascript - 为 Google 页面翻译指定 HTML DOM 节点(与 class=notranslate 相反)

java - 如何创建 RecyclerView 拖放(交换 2 个项目位置版本)

javascript - 如何在 Visual Studio 2012/2013 中为 JS 做区域折叠

javascript - 简单的ajax无法工作,可能是语法错误

javascript - 在文档就绪时隐藏除 1 个 dif 之外的所有 dif,并在 "change"之后取消隐藏 div

html - Facebook 粉丝页面上的 css 内联样式 safari

objective-c - -performDragOperation : not called when dragging from dock stack

wpf - 即使列表框有项目,ListBox ItemContainerGenerator 也会返回 null

javascript - If/Then Javascript 显示 HTML 代码

javascript - 意外的 token 导入/导出 - typescript