PHP输出ID拼接URL参数时JS取值为undefined如何解决
问题根因
你现在拿到undefined是两个代码逻辑错误导致的:
onclick="confirmDeleting(id)"里传入的id是a标签id属性的字符串值,不是DOM元素对象,函数里接收到的参数本质是类似"144"的字符串,字符串没有dataset属性,读取dataset.id自然返回undefined- 你没有在a标签上定义
data-id自定义属性,就算正确传入DOM元素,也读不到dataset.id对应的值 - 额外问题:你循环渲染的删除图标都写了固定
id="produktDel",会导致页面出现重复ID,不符合HTML规范;同时直接把数字作为元素id值也不符合HTML id命名规则(id不能以数字开头)。
修复方案
方案1:最小改动修复(无需调整PHP模板代码)
直接修改JS函数即可,因为你传入的参数本身就是记录ID的字符串值,不需要再通过dataset读取:
function confirmDeleting(recordId) { const deleteConfirmed = confirm("are you sure, you want to delete?"); if (deleteConfirmed) { window.location.href = "formprocess.php?dfID=" + recordId; } }
方案2:规范写法(推荐,符合HTML标准)
调整PHP模板中a标签的写法,用自定义属性存ID,传入DOM元素本身给函数:
- 修改PHP里的删除按钮代码,去掉不规范的id,用
data-*属性存记录ID,onclick传入this指代当前点击元素:
<div class="col-2"> <a onclick="confirmDeleting(this)" class="btn btn-outline-danger product-delete" href="#" data-id="<?= $EditProductInformation['ID'] ?>"> <i class="fa-solid fa-trash-can"></i> </a> </div>
- 对应JS函数调整为从DOM元素的自定义属性读取ID:
function confirmDeleting(clickElement) { const deleteConfirmed = confirm("are you sure, you want to delete?"); if (deleteConfirmed) { const recordId = clickElement.dataset.id; window.location.href = `formprocess.php?dfID=${recordId}`; } }
改完后跳转URL就会正常生成类似formprocess.php?dfID=144的格式,不会再出现undefined的问题。
内容的提问来源于stack exchange,提问作者Lampi
相关产品推荐
相关产品推荐

