YII2如何将持久化Ajax函数导入GridView?

YII2如何将持久化Ajax函数导入GridView?,ajax,gridview,yii2,Ajax,Gridview,Yii2,在网格行中实现ajax功能的每个函数;也就是说,从某个单元格的按钮或链接。这很有效。 但是,在使用Ajax更新网格之后;要么分类,要么过滤;这些功能不再执行。 自从yii1.x以来,我一直在观察这个问题。 第三方库(如kartik\editColumn)也是如此。它们只在网格“重新加载”后第一次工作,不再工作。这是错误的?当您将JS功能绑定到那些链接时,您会将它们绑定到DOM中的元素,这些元素在绑定时就出现了。这通常是在页面加载期间构建DOM的时候 ajax请求完成后,具有绑定JS功能的元素将替

在网格行中实现ajax功能的每个函数;也就是说,从某个单元格的按钮或链接。这很有效。 但是,在使用Ajax更新网格之后;要么分类,要么过滤;这些功能不再执行。 自从yii1.x以来,我一直在观察这个问题。
第三方库(如kartik\editColumn)也是如此。它们只在网格“重新加载”后第一次工作,不再工作。这是错误的?

当您将JS功能绑定到那些链接时,您会将它们绑定到DOM中的元素,这些元素在绑定时就出现了。这通常是在页面加载期间构建DOM的时候

ajax请求完成后,具有绑定JS功能的元素将替换为新元素,但JS功能不会绑定到这些新元素。这就是为什么JS在更新后“停止”工作的原因

有两种方法可以解决这个问题

1)更换内容后重新绑定JS功能。

您可以将绑定放在某个函数上,然后在页面准备就绪并替换html内容后调用该函数

2)使用事件冒泡。

大多数事件不仅仅是在它们发生的元素上调用的。它们还通过整个DOM对其所有祖先进行调用。因此,您可以不直接将事件绑定到
”;
$('.clickme2')。替换为('');
});
//这是通常的装订
$('.clickme1')。单击(函数(事件){
警报(“clickme1 clicked”);
event.preventDefault();
});
//这使用了起泡
$('.wrapper')。在('click','.clickme2',函数()上{
警报(“clickme2 clicked”);
event.preventDefault();
});