我有一个页面显示框中的内容。这些框上方有四个按钮,点击它们时会过滤下面的内容。我第一次按下任何按钮时,过滤器工作得很好,但是如果我第二次按下按钮则不起作用。
我只更换过滤后的内容div(方框),因此用于过滤的按钮不会被替换。我假设某种绑定/链接问题,但未能触及它的底部。
任何帮助表示感谢。
我的观点(我的点击功能中的console.log始终显示正确的按钮ID):
$(document).ready(function () {
jQuery('.btnSubmit').on('click', function(e){
e.preventDefault();
var mypage_id = this.id;
console.log(mypage_id);
var url = "http://localhost/site/get_list_view";
$.ajax({
url: url,
type: 'POST',
data: { my_data: this.id},
cache: false,
success : function(data){
if(data){
$('.deals').replaceWith(data);
}
}
});
});});
我的控制器(缩小它只是回显我的数据,并在每次命中时创建一个随机数 - 数据和数字在第一次命中后永远不会改变):
public function get_list_view(){
$my_data = $this->input->post('my_data');
echo($my_data);
echo(rand(10,100));}
任何提示?
干杯
答案 0 :(得分:2)
我会说它是因为在你运行这一行之后:
$('.deals').replaceWith(data);
具有“.deals”类的html元素完全被您的ajax响应替换。如果您的ajax响应没有包含“.deals”类的包含元素,则在刷新页面之前它将永远不会再有效。
你也可以简单地重写一行来说:
$('.deals').html(data);
然后你的响应不需要有一个“.deals”包装类元素,因为你不再替换它,而是用响应填充它。
如果没有您的所有代码,以上是我最好的猜测。另一个猜测是,有时jquery事件处理程序在ajax刷新内容后没有正确重新处理,在过去我们使用“live”来处理它,但它被替换为.on的新用法:
$( document ).on( events, selector, data, handler );
所以在你的情况下看起来像:
jQuery(document).on('click', '.btnSubmit', function(e) {
... rest of your code