我的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++;
}
答案 0 :(得分:0)
您可能正在以这种方式呈现视图:
$this->renderPartial($view, $params);
试试这个:
$this->renderPartial($view, $params, false, true);
答案 1 :(得分:0)
我不确定是这种情况,但是...在页面加载后,有些东西与jquery相关联。
例如我选择使用。我有一个函数将所选下拉列表绑定到具有特定类的所有下拉列表。现在,如果我使用Ajax带来代码,那么这些下拉列表不会被选中,因为绑定它们的函数在开始时运行了1次。如果我想让下拉列表再次使用,那么我需要重新运行所选择的函数,以便在我进行ajax调用后再次选择。
你确定你的ajax链接也不是这样吗?
答案 2 :(得分: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脚本中的某个地方,这样所有事件只会加载一次。