我正在尝试使用AJAX从我的数据库中删除数据。我有一个问题列表,它们被分类到一个表中。表中的每一行都有一个我用作按钮的超链接,这些删除按钮的id与数据库中给出的问题具有相同的id。这些删除按钮属于名为' delete_btn'的类。 在' loadDeleteButtons'函数我试图迭代这个数组,并给每个删除按钮一个onclick事件,最终会调用' deleteData'机能的研究。此功能应使用删除按钮' ID'删除给定的问题。并应使用异步查询删除它。 我收到这个错误:
Uncaught Typerror: undefined is not a function
此错误指向' obj.getAttribute(' id')'部分。提前谢谢!
var loadData = function(obj) {
$.ajax({
url: 'ReadQuestionList.php?bottom=' + limit.bottom + '&number=' + limit.number,
type: "GET",
cache: false,
success: function (html) {
obj.html(html);
setTableWidth(false);
deleteButtons = document.getElementsByClassName('delete_btn');
loadDeleteButtons();
}
});
};
var loadDeleteButtons = function(){
for(var obj in deleteButtons){
deleteButtons[obj].onclick = deleteData(obj);
}
};
var deleteData = function(obj){
$.ajax({
url: 'ReadQuestionList.php?id=' + obj.getAttribute('id'),
type: "GET",
cache: false,
success: function (html) {
setTableWidth(false);
loadData(questionTable);
}
});
};
答案 0 :(得分:1)
你有几行使用未定义的变量:
for(var obj in deleteButtons){
deleteButtons
超出了loadDeleteButtons()
的范围。在顶部添加var deleteButtons;
即可解决此问题。
loadData(questionTable);
questionTable
未在任何地方定义。
答案 1 :(得分:1)
此代码会导致deleteButtons
成为 HTMLCollection :
deleteButtons = document.getElementsByClassName('delete_btn');
此代码遍历该集合的每个对象。假设该类只有一个按钮,集合的对象将是0
,length
,item
和namedItem
:
for(var obj in deleteButtons){
deleteButtons[obj].onclick = deleteData(obj);
}
这些对象都没有getAttribute
属性,导致此行失败:
url: 'ReadQuestionList.php?id=' + obj.getAttribute('id')
相反,这样做:
for(var obj = 0 ; obj < deleteButtons.length ; obj++) {
deleteButtons[obj].onclick = function() {
deleteData(this);
}
}
答案 2 :(得分:-1)
由于deleteButtons
在ajax回调中定义,因此在声明loadDeleteButtons
时可能无法加载。
更好的解决方案是使用jQuery.on委派事件处理程序。
$('body').on('click', '.delete_btn', function(){
deleteData($(this));
});