【发布时间】:2014-03-02 19:51:57
【问题描述】:
我基本上是通过 ajax 将数据库中的内容加载到 div 中。然后,点击这些内容片段应该会重新加载新内容。
ajax 请求被初始化为我在开头调用的类中的一个方法:
function Request(tag1, tag2, tag3) {
this.tag1 = tag1,
this.tag2 = tag2,
this.tag3 = tag3
}
Request.prototype = {
ajaxCategoryRequest: function () {
$.ajax({
type: "GET",
url: "request2.php",
data: "tag1=" + this.tag1 + "&tag2=" + this.tag2 + "&tag3=" + this.tag3,
success: function (data) {
var jdata = $.parseJSON(data);
//Frage ausgeben
$("h1.question").html(jdata[0]);
//Tiles ausgeben
for (var i = 1; i < jdata.length; i++) {
$("#tiles").append(
'<div class="category" id="' + jdata[i].type + '" data-owntag="' + jdata[i].owntag + '" data-description="' + jdata[i].description + '"><img src="' + jdata[i].imageurl + '" alt="' + jdata[i].name + '"/><div class="ctitle">' + jdata[i].name + '</div></div>'
);
}
}
});
}
};
var searchtype = new Request("", "", "");
searchtype.ajaxCategoryRequest();
然后单击上面创建的 div 之一应该会启动一个新请求:
$("#tiles").on('click', '.category', function () {
var tag1 = "newtag";
var tag2 = "newtag";
var tag3 = "newtag";
//remove old content
$('.category').remove();
//start new request
var nextrequest = new Request(tag1, tag2, tag3);
nextrequest.ajaxCategoryRequest();
});
});
基本上一切正常,内容已加载,如果我单击一个 div,它确实会触发一个新请求,但出现错误,它被触发了两次。因此,每个新加载的元素都会出现两次。
我搜索了一下,我认为是由于ajax请求中的打印循环,每次都将click函数绑定到div。我读了很多关于 .unbind("click") 和 .bind() it 或类似的内容( .off() ),但对我没有任何帮助。也许这个问题还有其他解决方案?
【问题讨论】:
-
顺便说一下,你可以将jQuery中的AJAX调用压缩到
$.get(url, function(data){ ...data stuff here... }).success(function(data){...});。趋向于不那么阻塞并且更容易阅读(imo)。 -
事件监听器究竟是什么时候绑定的?请求后是否再次绑定?
-
@Bergi 我是一个初学者,老实说我不太确定,但我认为每次 AJAX 调用打印出一个新的“.category” div 时都会受到约束。 .on() 是在请求之后编写的。也许整个代码都有帮助,mwmg.no-ip.biz/test/index2.php
-
是的,它确实有帮助。您尚未在帖子中显示错误代码...
-
@Bergi 您认为错误在哪里,所以我可以将其包含在帖子中?
标签: javascript jquery ajax dynamic click