简体   繁体   English

拖放

[英]Dragging and dropping

I want to drag and drop the table contents into a text-box. 我想将表内容拖放到文本框中。

HTML : HTML:

<table id = "carTypes">
    <tr><th>Car Type</th><th>Price per mile</th></tr>
    <tr><td carValue = "compact" draggable = "true" >Compact</td><td>$0.99</td></tr>
    <tr><td carValue = "Intermediate" draggable = "true" >Intermediate</td><td>$1.99</td></tr>
    <tr><td carValue = "Luxury" draggable = "true" >Luxury</td><td>$2.99</td></tr>
    <tr><td carValue = "Limo" draggable = "true" >Limo</td><td>$4.99</td></tr>
</table><p>Drag and Drop from the above car-types list to below box: <input type = "text" id = "carTypeChosen" placeholder = 'car type you want' /></p>

JS : JS:

var registerDragDrop = function() {
    var dragSource = document.getElementById("carTypes");

    dragSource.ondragstart = function(event) {
        var dataToCopy = this.getElementsByTagName("td").getAttribute("carValue");
        event.dataTransfer.setData("Text", dataToCopy);
        return true;
    };

    var dropTarget = document.getElementById("carTypeChosen");

    dropTarget.ondrop = function(event) {
        this.value = event.dataTransfer.getData("Text");
        event.preventDefault();
        return false;
    };

    dropTarget.ondragover = function(event) {
        event.preventDefault();
        return false;
    };

    dropTarget.ondragend = function(event) {
        event.preventDefault();
        return false;
    };
};

When I'm dragging and dropping the car type, null value is being dropped instead of a car value.I don't know what I am doing wrong. 当我拖放汽车类型时,将丢弃空值而不是汽车值。我不知道我在做什么错。 Please explain 请解释

Working Fiddle 工作小提琴

Your code work after some changes, you have this inside dragSource.ondragstart function that return all table instead of dropped td what means when you try getAttribute("carValue") that generate an error because table don't have a carValue attribut, so use event.target that return target or dropped td in our case instead of this . 您的代码经过一些更改后可以工作,在dragSource.ondragstart函数中包含this函数, this函数返回所有表而不是删除td这意味着当您尝试getAttribute("carValue")会生成错误,因为表没有carValue属性,因此请使用event.target返回目标或在我们的情况下而不是this丢弃td。

Also you have to call your function registerDragDrop() after definition. 另外,您必须在定义后调用函数registerDragDrop()

JS changes JS变更

Replace : 更换:

this.getElementsByTagName("td").getAttribute("carValue");

By : 由:

var dataToCopy = event.target.getAttribute("carValue");

Full JS : 完整的JS:

var registerDragDrop = function() {
    var dragSource = document.getElementById("carTypes");

    dragSource.ondragstart = function(event) {
        var dataToCopy = event.target.getAttribute("carValue");
        event.dataTransfer.setData("Text", dataToCopy);
        return true;
    };

    var dropTarget = document.getElementById("carTypeChosen");

    dropTarget.ondrop = function(event) {
        this.value = event.dataTransfer.getData("Text");
        event.preventDefault();
        return false;
    };

    dropTarget.ondragover = function(event) {
        event.preventDefault();
        return false;
    };

    dropTarget.ondragend = function(event) {
        event.preventDefault();
        return false;
    };
};

Hope this help. 希望能有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM