自动生成元素上的无干扰JavaScript事件
Unobtrusive JavaScript event on auto-generated elements
对于博客管理页面上的每一篇文章,我都会循环使用以下PHP代码:
echo '<a class="delete_link" id="delete_link_'.$row['rowid'].'">Delete</a>';
所以它输出:
<a class="delete_link" id="delete_link_1">Delete</a>
<a class="delete_link" id="delete_link_2">Delete</a>
<a class="delete_link" id="delete_link_3">Delete</a>
等等…
通过单击这些链接,我希望浏览器通过XHR发送DELETE请求,但我不知道如何以不引人注目的方式设置事件。我的例子不起作用,因为sendDeleteRequest()
是用最后添加的id触发的,无论我点击哪个链接:
function sendDeleteRequest(id) {
// I only put a simple alert in this function for now.
alert("Id of firing element: " + id);
}
onload = function() {
var deleteLinks = document.getElementsByClassName("delete_link");
for (var node in deleteLinks) {
deleteLinks[node].onclick = function() {
sendDeleteRequest(deleteLinks[node].getAttribute("id"));
}
}
}
这个代码出了什么问题?还有什么我需要注意的吗?我在addEventListener()
上也做过同样的尝试,但没有成功。我仍然使用XHTML 1.0,在这个项目中我不能使用jQuery。
您可以使用这样的东西:
var deleteLinks = document.getElementsByClassName("delete_link");
for (var i = 0; i < deleteLinks.length; i++) {
deleteLinks[i].onclick = function() {
sendDeleteRequest(this.id);
}
}
注意,使用for (node in deleteLinks)
迭代数组是不明智的,因为除了数组元素外,迭代中还会包含可枚举属性。这种类型的迭代应该只用于迭代对象的所有属性。
我在您的代码中所做的主要更改是使用对this
的引用来获得单击的id
值。您的操作方式造成了问题,因为for
循环和node
的值在稍后单击时已经运行完成,因此node
的值不是您希望的值。
相关文章:
- 在不干扰HTML代码的情况下,将javascript文件导入javascript文件
- 由于另一个干扰函数,Javascript函数无法正常工作
- Javascript相互干扰
- Joomla2.5框架似乎干扰了javascript语法
- jQuery插件干扰W/其他Javascript
- 正在检查Javascript中的干扰时间跨度
- JavaScript-确保多个字符串不受干扰的整洁方式;t彼此相等
- Jquery 移动干扰 JavaScript 填充选择框
- 是否有JQuery或Javascript警告消息实用程序,可以在不干扰用户的情况下显示和超时
- 如何在不干扰其他表单的情况下使用此javascript代码
- 在没有服务器端干扰的情况下将javascript变量传递到下一页
- 自动生成元素上的无干扰JavaScript事件
- CSS如何干扰JavaScript
- JavaScript表单提交验证会干扰其他提交按钮
- Javascript URL导航处理干扰其他Javascript部分
- 逗号干扰了Javascript中的数字输入
- XML干扰javascript变量
- 图像调整与javascript没有视觉干扰
- 在JavaScript中,在不干扰先前排序(部分排序)的情况下,在另一个键上使用对象数组
- 使用无干扰JavaScript的窗体单选按钮