【问题标题】:Cant access value from the HTML dataset无法从 HTML 数据集中访问值
【发布时间】:2020-07-27 21:46:10
【问题描述】:

在从一个 div 拖放到另一个 div 时,我使用 Dataset 来获取一些不同的值。但是当我调用 Javascript 函数时,我无法访问其他属性,例如 data-customerId

带有 PHP 动态数据的 HTML:

<fieldset id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
    <legend style="color:cadetblue; border:white; width:auto; font:bold">Vacant parking spots</legend>
    <?php $counter = 0; foreach ($sql_get_vacant_spots_results_ as $row) { ?>
        <div id="<?php echo $counter; ?>" data-customerid="<?php echo $arr_users[0]['customer_id']; ?>" data-y="<?php echo $row['spot_no'] ?>" data-z="<?php echo $row['location_id'] ?>" style="float: left; width: 120px;height: 80px;padding: 10px;border-radius: 20px;margin: 10px;background-color: cadetblue;" draggable="true" ondragstart="drag(event)" width="88" height="31">
            <labled style="color: white; font:bold; font-size:large;"><?php echo 'Spot: ' . $row['spot_no'] . ' Gate: ' . $row['parking_gate_id'] ?></label>
        </div>
    <?php $counter++; } ?>
</fieldset>

<fieldset id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">
    <legend style="color:cadetblue; border:white; width:auto; font:bold">Current parking spots of the customer</legend>
    <?php $count = 0; foreach ($arr_users as $user) { ?>
        <div id="<?php echo $count ?>" data-customerid="<?php echo $user['customer_id'] ?>" data-y="<?php echo $user['spot_id'] ?>" data-z="<?php echo $user['location_id'] ?>" style="float: left; width: 120px;height: 80px;padding: 10px;border-radius: 20px;margin: 10px;background-color: cadetblue;" draggable="true" width="88" height="31">
            <labled style="color: white; font:bold; font-size:large;"><?php echo 'Spot: ' . $user['spot_id'] . ' Gate: ' .  $user['gate_id'] ?></label>
        </div>
    <?php $count++; } ?>
</fieldset>

这里是 Javascript:

   function drop(ev) {
        const el = document.querySelector('#' +ev.dataTransfer.getData("text")); //prints: Uncaught DOMException: Failed to execute 'querySelector' on 'Document': '#33' is not a valid selector.
        console.log('drop', el.dataset.customerid);
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        ev.target.appendChild(document.getElementById(data));
    }

【问题讨论】:

  • 旁注:如果你还没有接受 vanilla javascript 的想法,你可以使用 jquery 为自己节省大量的输入:)

标签: javascript php html html-dataset


【解决方案1】:

通过像这样访问 id 来修复:

const el = document.querySelector("[id=" + "\'" + ev.dataTransfer.getData("text") + "\'" + "]");

编辑:

HTML 元素 ID:

id="count_id<?php echo $counter; ?>"

【讨论】:

  • 那是违反直觉的。鉴于querySelector 采用有效的#idname。您的问题可能源于您的 id 只是数字,而这将是有问题的:“ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,并且后面可能跟任何字母数、数字 ([0-9])、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")。"
  • @IncredibleHat 我知道。检查我的编辑,我在数字 id 之前添加文本
  • 啊,我在您的问题代码中找不到实际的id 值,所以很好奇! id="&lt;?php echo $counter; ?&gt;" 看起来只是 int。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多