2

通过 ajax 在另一个视图中渲染后,我的 ajax 链接不起作用。我使用 ajax 的委托函数来防止它。在第一个视图中它运行良好,但在第二页中它发送多个点击请求。

这是我的代码:

$i=0;
foreach($contents as $conts){

   echo CHtml::ajaxLink(conts->name, 
       array('frontend/dataView','id'=> $conts->content_id,'cat_id'=>$cat->parent_id ), 
       array('update'=>'#level3rd','beforeSend'=>'function(){$(\'body\').undelegate(\'#cont'.$i.'\', \'click\');}',),
       array('id'=>'cont'.$i,'onclick'=>"makeContactive(this.id);"));
$i++;
}
4

3 回答 3

0

onclick 事件不适用于动态加载的内容。

在旧的 jQuery 中,你用 .live('click') 绑定你的点击(1.7 之前) 现在从 jQuery 1.7 开始你可以使用 .on('click')。

虽然你应该确保你不会犯和我一样的错误。

$('#myAnchor').on('click', myclickFunction)

这适用于页面加载,但不适用于动态内容。正确的做法是。

$('#parentElement').on('click', '#myAnchor', 'customEvenName', myclickFunction)

这里的父元素应该是非动态加载的

所有这一切的实际好处是,您可以将 .on('click') 事件放在任何地方,通常是在您包含的 js 脚本中的某个地方,以便所有事件只加载一次。

于 2013-01-18T07:33:21.517 回答
0

我不确定情况是否如此,但是......在页面加载后,有些事情与 jquery 相关联。

例如我使用选择。我有一个函数将所选下拉列表与具有特定类的所有下拉列表联系起来。现在,如果我将代码与 Ajax 一起使用,则这些下拉列表不会使用 selected,因为将它们绑定在一起的函数在开始时都运行了 1 次。如果我想让下拉菜单再次与 selected 一起使用,那么在我进行 ajax 调用后,我需要重新运行与 selected 相关联的函数。

您确定您的 ajax 链接也不是这种情况吗?

于 2013-01-18T05:31:03.980 回答
0

您可能正在以这种方式呈现您的视图:

$this->renderPartial($view, $params);

尝试这个:

$this->renderPartial($view, $params, false, true);
于 2012-10-26T13:09:37.260 回答