javascript - 如何访问按钮提交的自声明属性?
问题描述
我创建了一个简单的按钮并添加了一些自我声明的属性(postid 和作者)。
<%for(var blog of user.posts){%>
<button type="submit" id="likebtn" onclick="likedpost()"
postid="<%=blog._id%>" author="<%=user.username%>">Like</button>
<%}%>
这是我定义的一个函数。
function likedpost(){
var id = document.getElementById("likebtn").getAttribute("postid");
var author = document.getElementById("likebtn").getAttribute("author");
console.log("id form likedpost function =" +id+"and author of this post is="+author);
console.log('post liked');
}
对于每个博客项目,当我单击其各自的按钮时,它会为 console.log() 中的所有项目提供相同的 blog._id。我可以在检查器中看到每个按钮都有不同的 blog._id。我认为问题在于它找到了 id = "likebtn" 的第一个元素,因为每个按钮都有相同的 id,即它返回第一个值。我该如何解决?谢谢!
解决方案
您不应该对多个元素使用相同的 ID 标签。Intead,您可以通过函数传递对按钮本身的引用并访问属性。最佳做法是data-attributes
通过dataset
属性访问它们
function likedpost(el) {
let id = el.dataset.postid;
let author = el.dataset.author;
console.log("id form likedpost function =" + id + "and author of this post is=" + author);
console.log('post liked');
}
<button type="submit" id="likebtn" onclick="likedpost(this)" data-postid="<%=blog._id%>" data-author="<%=user.username%>">Like</button>
推荐阅读
- javascript - GeoJSON 到 SVG 并在与 GeoJSON(坐标)相同的位置使用 SVG?
- javascript - prisma.user.findUnique() 调用无效
- ckeditor - CKEditor 5:如何向上/向下转换非元素文本字符串?
- visual-studio-code - 如何增加出现亮点项目?
- sql - 在 Oracle SQL 中使用正则表达式在字符串字段中查找 Unicode 字符
- angular - 如何在 Angular NgZone 之外运行我的代码
- python - 我用 py2app 构建的应用程序立即崩溃
- git - 复制 GitHub 博客页面存储库而不是分叉它
- google-sheets - 根据函数访问一行中的字段
- firebase - 从 Firebase 检索所有活跃用户