首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YII2如何将Ajax函数持久化到GridView中?

YII2如何将Ajax函数持久化到GridView中?
EN

Stack Overflow用户
提问于 2019-10-30 15:34:44
回答 1查看 41关注 0票数 0

每个成功地在网格行中创建ajax函数的人,即从某个单元格的按钮或链接中。这个效果很好。

但是,在使用Ajax更新网格之后,无论是排序还是筛选,这些函数都不再执行。从YII1.x开始,我就一直在观察这个问题。

第三方库(如kartik \ editColumn )也是如此。它们只是第一次工作,在网格“重新加载”之后,它们就不再工作了。这不对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-30 17:57:18

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

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

如何处理这一问题有两种选择。

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

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

2)使用事件冒泡.

大多数事件不仅仅是在它们发生的元素上调用的。它们还通过整个DOM在其所有祖先上被调用。因此,您可以不直接将事件绑定到<a>元素,而是绑定到某些不能用update替换的祖先。使用jquery,您可以很容易地使用on(event, selector, handler),如下所示:

代码语言:javascript
复制
$('.replace').click(function() {
    $('.clickme1').replaceWith('<a href="#" class="clickme1">Replaced - 1</a>');
    $('.clickme2').replaceWith('<a href="#" class="clickme2">Replaced - 2</a>');
});
//this is usual binding
$('.clickme1').click(function(event) {
    alert('clickme1 clicked');
    event.preventDefault();
});
//this uses bubbling
$('.wrapper').on('click', '.clickme2', function() { 
    alert('clickme2 clicked');
    event.preventDefault();
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
  <a href="#" class="clickme1">Click me - 1</a><br>
  <a href="#" class="clickme2">Click me - 2</a>
</div>
<br>
<a href="#" class="replace">Replace links</a>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58628882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档